diff options
Diffstat (limited to 'demo/shaders.h')
| -rw-r--r-- | demo/shaders.h | 108 |
1 files changed, 46 insertions, 62 deletions
diff --git a/demo/shaders.h b/demo/shaders.h index 937c2a2..168a333 100644 --- a/demo/shaders.h +++ b/demo/shaders.h @@ -34,32 +34,41 @@ #include "../include/NvFlex.h" +void GetRenderDevice(void** device, void** context); -#if FLEX_DX - -#include <d3d11.h> -typedef ID3D11Buffer* VertexBuffer; -typedef ID3D11Buffer* IndexBuffer; - -void GetRenderDevice(ID3D11Device** device, ID3D11DeviceContext** context); - -#else - -typedef unsigned int VertexBuffer; -typedef unsigned int IndexBuffer; -typedef unsigned int Texture; - -#endif +struct DiffuseRenderBuffers; +struct FluidRenderBuffers; struct SDL_Window; -void InitRender(SDL_Window* window, bool fullscreen, int msaa); +struct RenderInitOptions +{ + RenderInitOptions(): + defaultFontHeight(-1), + asyncComputeBenchmark(false), + fullscreen(false), + numMsaaSamples(1), + window(nullptr) + {} + int defaultFontHeight; ///< Set to -1 for the default + bool asyncComputeBenchmark; ///< When set, will configure renderer to perform extra (unnecessary) rendering work to make sure async compute can take place. + bool fullscreen; + int numMsaaSamples; + SDL_Window* window; +}; + +void InitRender(const RenderInitOptions& options); void DestroyRender(); void ReshapeRender(SDL_Window* window); void StartFrame(Vec4 clearColor); void EndFrame(); +void StartGpuWork(); +void EndGpuWork(); + +void FlushGraphicsAndWait(); + // set to true to enable vsync void PresentFrame(bool fullsync); @@ -86,7 +95,7 @@ void ShadowEnd(); // primitive draw methods void DrawPlanes(Vec4* planes, int n, float bias); -void DrawPoints(VertexBuffer positions, VertexBuffer color, IndexBuffer indices, int n, int offset, float radius, float screenWidth, float screenAspect, float fov, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, bool showDensity); +void DrawPoints(FluidRenderBuffers* buffer, int n, int offset, float radius, float screenWidth, float screenAspect, float fov, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, bool showDensity); void DrawMesh(const Mesh*, Vec3 color); void DrawCloth(const Vec4* positions, const Vec4* normals, const float* uvs, const int* indices, int numTris, int numPositions, int colorIndex=3, float expand=0.0f, bool twosided=true, bool smooth=true); void DrawBuffer(float* buffer, Vec3 camPos, Vec3 lightPos); @@ -103,6 +112,11 @@ void DrawGpuMeshInstances(GpuMesh* m, const Matrix44* xforms, int n, const Vec3& void BindSolidShader(Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, float bias, Vec4 fogColor); void UnbindSolidShader(); +float RendererGetDeviceTimestamps(unsigned long long* begin, unsigned long long* end, unsigned long long* freq); +void* GetGraphicsCommandQueue(); +void GraphicsTimerBegin(); +void GraphicsTimerEnd(); + // new fluid renderer struct FluidRenderer; @@ -110,32 +124,14 @@ struct FluidRenderer; FluidRenderer* CreateFluidRenderer(uint32_t width, uint32_t height); void DestroyFluidRenderer(FluidRenderer*); -struct FluidRenderBuffers -{ - VertexBuffer mPositionVBO; - VertexBuffer mDensityVBO; - VertexBuffer mAnisotropyVBO[3]; - IndexBuffer mIndices; - - VertexBuffer mFluidVBO; // to be removed - - // wrapper buffers that allow Flex to write directly to VBOs - NvFlexBuffer* mPositionBuf; - NvFlexBuffer* mDensitiesBuf; - NvFlexBuffer* mAnisotropyBuf[3]; - NvFlexBuffer* mIndicesBuf; - - int mNumFluidParticles; -}; - -FluidRenderBuffers CreateFluidRenderBuffers(int numParticles, bool enableInterop); -void DestroyFluidRenderBuffers(FluidRenderBuffers buffers); +FluidRenderBuffers* CreateFluidRenderBuffers(int numParticles, bool enableInterop); +void DestroyFluidRenderBuffers(FluidRenderBuffers* buffers); // update fluid particle buffers from a FlexSovler -void UpdateFluidRenderBuffers(FluidRenderBuffers buffers, NvFlexSolver* flex, bool anisotropy, bool density); +void UpdateFluidRenderBuffers(FluidRenderBuffers* buffers, NvFlexSolver* flex, bool anisotropy, bool density); // update fluid particle buffers from host memory -void UpdateFluidRenderBuffers(FluidRenderBuffers buffers, +void UpdateFluidRenderBuffers(FluidRenderBuffers* buffers, Vec4* particles, float* densities, Vec4* anisotropy1, @@ -145,38 +141,26 @@ void UpdateFluidRenderBuffers(FluidRenderBuffers buffers, int* indices, int numIndices); -// vertex buffers for diffuse particles -struct DiffuseRenderBuffers -{ - VertexBuffer mDiffusePositionVBO; - VertexBuffer mDiffuseVelocityVBO; - IndexBuffer mDiffuseIndicesIBO; - - NvFlexBuffer* mDiffuseIndicesBuf; - NvFlexBuffer* mDiffusePositionsBuf; - NvFlexBuffer* mDiffuseVelocitiesBuf; - - int mNumDiffuseParticles; -}; - // owns diffuse particle vertex buffers -DiffuseRenderBuffers CreateDiffuseRenderBuffers(int numDiffuseParticles, bool& enableInterop); -void DestroyDiffuseRenderBuffers(DiffuseRenderBuffers buffers); +DiffuseRenderBuffers* CreateDiffuseRenderBuffers(int numDiffuseParticles, bool& enableInterop); +void DestroyDiffuseRenderBuffers(DiffuseRenderBuffers* buffers); // update diffuse particle vertex buffers from a NvFlexSolver -void UpdateDiffuseRenderBuffers(DiffuseRenderBuffers buffers, NvFlexSolver* solver); +void UpdateDiffuseRenderBuffers(DiffuseRenderBuffers* buffers, NvFlexSolver* solver); // update diffuse particle vertex buffers from host memory -void UpdateDiffuseRenderBuffers(DiffuseRenderBuffers buffers, +void UpdateDiffuseRenderBuffers(DiffuseRenderBuffers* buffers, Vec4* diffusePositions, Vec4* diffuseVelocities, - int* diffuseIndices, int numDiffuseParticles); +// Returns the number of particles in the diffuse buffers +int GetNumDiffuseRenderParticles(DiffuseRenderBuffers* buffers); + // screen space fluid rendering -void RenderEllipsoids(FluidRenderer* render, FluidRenderBuffers buffers, int n, int offset, float radius, float screenWidth, float screenAspect, float fov, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, Vec4 color, float blur, float ior, bool debug); -void RenderDiffuse(FluidRenderer* render, DiffuseRenderBuffers buffer, int n, float radius, float screenWidth, float screenAspect, float fov, Vec4 color, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, float motionBlur, float inscatter, float outscatter, bool shadow, bool front); +void RenderEllipsoids(FluidRenderer* render, FluidRenderBuffers* buffers, int n, int offset, float radius, float screenWidth, float screenAspect, float fov, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, Vec4 color, float blur, float ior, bool debug); +void RenderDiffuse(FluidRenderer* render, DiffuseRenderBuffers* buffer, int n, float radius, float screenWidth, float screenAspect, float fov, Vec4 color, Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, ShadowMap* shadowTex, float motionBlur, float inscatter, float outscatter, bool shadow, bool front); // UI rendering -void imguiGraphDraw(); -void imguiGraphInit(const char* fontpath);
\ No newline at end of file + +void DrawImguiGraph(); |