aboutsummaryrefslogtreecommitdiff
path: root/demo/shaders.h
diff options
context:
space:
mode:
Diffstat (limited to 'demo/shaders.h')
-rw-r--r--demo/shaders.h108
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();