Branimir Karadžić %!s(int64=9) %!d(string=hai) anos
pai
achega
6c767eed9c
Modificáronse 1 ficheiros con 57 adicións e 30 borrados
  1. 57 30
      examples/31-rsm/reflectiveshadowmap.cpp

+ 57 - 30
examples/31-rsm/reflectiveshadowmap.cpp

@@ -66,7 +66,7 @@
 #define SHADOW_MAP_DIM 512
 #define LIGHT_DIST 10.0f
 
-static const char * m_meshPaths[MESH_COUNT] =
+static const char * s_meshPaths[] =
 {
 	"meshes/cube.bin",
 	"meshes/orb.bin",
@@ -76,6 +76,16 @@ static const char * m_meshPaths[MESH_COUNT] =
 	"meshes/hollowcube.bin"
 };
 
+static const float s_meshScale[] =
+{
+	0.25f,
+	0.5f,
+	0.05f,
+	0.5f,
+	0.05f,
+	0.05f
+};
+
 // Vertex decl for our screen space quad (used in deferred rendering)
 struct PosTexCoord0Vertex
 {
@@ -154,8 +164,21 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf
 	}
 }
 
-class ExampleReflectiveShadowMap : public entry::AppI
+class ExampleRSM : public entry::AppI
 {
+public:
+	ExampleRSM()
+		: m_reading(0)
+		, m_currFrame(UINT32_MAX)
+		, m_cameraSpin(false)
+		, m_lightElevation(35.0f)
+		, m_lightAzimuth(215.0f)
+		, m_rsmAmount(0.25f)
+		, m_vplRadius(3.0f)
+		, m_texelHalf(0.0f)
+	{
+	}
+
 	void init(int _argc, char** _argv) BX_OVERRIDE
 	{
 		Args args(_argc, _argv);
@@ -225,13 +248,15 @@ class ExampleReflectiveShadowMap : public entry::AppI
 		m_combineProgram = loadProgram("vs_rsm_combine", "fs_rsm_combine");  // Combiner
 
 		// Load some meshes
-		for (uint32_t i = 0; i < MESH_COUNT; i++) {
-			m_meshes[i] = meshLoad(m_meshPaths[i]);
+		for (uint32_t i = 0; i < MESH_COUNT; i++)
+		{
+			m_meshes[i] = meshLoad(s_meshPaths[i]);
 		}
 
 		// Randomly create some models
 		bx::RngMwc mwc;  // Random number generator
-		for (Model & m : m_models) {
+		for (Model & m : m_models)
+		{
 			uint32_t r = mwc.gen() % 256;
 			uint32_t g = mwc.gen() % 256;
 			uint32_t b = mwc.gen() % 256;
@@ -461,8 +486,10 @@ class ExampleReflectiveShadowMap : public entry::AppI
 
 			// Draw some lights (these should really be instanced but for this example they aren't...)
 			const unsigned MAX_SPHERE = 32;
-			for (uint32_t i = 0; i < MAX_SPHERE; i++) {
-				for (uint32_t j = 0; j < MAX_SPHERE; j++) {
+			for (uint32_t i = 0; i < MAX_SPHERE; i++)
+			{
+				for (uint32_t j = 0; j < MAX_SPHERE; j++)
+				{
 					// These are used in the fragment shader
 					bgfx::setTexture(0, s_normal, m_gbuffer, GBUFFER_RT_NORMAL);  // Normal for lighting calculations
 					bgfx::setTexture(1, s_depth,  m_gbuffer, GBUFFER_RT_DEPTH);   // Depth to reconstruct world position
@@ -567,10 +594,12 @@ class ExampleReflectiveShadowMap : public entry::AppI
 
 	void drawAllModels(uint8_t _pass, bgfx::ProgramHandle _program)
 	{
-		for (const Model & m : m_models)
+		for (uint32_t ii = 0; ii < BX_COUNTOF(m_models); ++ii)
 		{
+			const Model& model = m_models[ii];
+
 			// Set up transform matrix for each model
-			float scale = m_meshScale[m.mesh];
+			float scale = s_meshScale[model.mesh];
 			float mtx[16];
 			bx::mtxSRT(mtx
 					, scale
@@ -579,14 +608,14 @@ class ExampleReflectiveShadowMap : public entry::AppI
 					, 0.0f
 					, 0.0f
 					, 0.0f
-					, m.position[0]
-					, m.position[1]
-					, m.position[2]
+					, model.position[0]
+					, model.position[1]
+					, model.position[2]
 					);
 
 			// Submit mesh to gbuffer
-			bgfx::setUniform(u_tint, m.color);
-			meshSubmit(m_meshes[m.mesh], _pass, _program, mtx);
+			bgfx::setUniform(u_tint, model.color);
+			meshSubmit(m_meshes[model.mesh], _pass, _program, mtx);
 		}
 
 		// Draw ground
@@ -662,11 +691,7 @@ class ExampleReflectiveShadowMap : public entry::AppI
 	bgfx::TextureHandle m_lightBufferTex;
 	bgfx::TextureHandle m_shadowBufferTex[2];
 
-	uint32_t m_reading = 0;
-	uint32_t m_currFrame = UINT32_MAX;
-
-	// UI
-	bool m_cameraSpin = false;
+	const bgfx::Caps* m_caps;
 
 	struct Model
 	{
@@ -676,21 +701,23 @@ class ExampleReflectiveShadowMap : public entry::AppI
 	};
 
 	Model m_models[MODEL_COUNT];
+	Mesh * m_meshes[MESH_COUNT];
 
-	// Light position;
-	float m_lightDir[4];
-	float m_lightElevation = 35.0f;
-	float m_lightAzimuth = 215.0f;
+	uint32_t m_reading;
+	uint32_t m_currFrame;
 
+	// UI
+	bool m_cameraSpin;
 
-	float m_rsmAmount = 0.25f; // Amount of rsm
-	float m_vplRadius = 3.0f;  // Radius of virtual point light
+	// Light position;
+	float m_lightDir[4];
+	float m_lightElevation;
+	float m_lightAzimuth;
 
-	const float m_meshScale[MESH_COUNT] = {0.25f, 0.5f, 0.05f, 0.5f, 0.05f, 0.05f};
-	const bgfx::Caps* m_caps;
-	Mesh * m_meshes[MESH_COUNT];
+	float m_rsmAmount; // Amount of rsm
+	float m_vplRadius; // Radius of virtual point light
 
-	float m_texelHalf = 0.0f;  // Texel offset for dx9
+	float m_texelHalf;
 };
 
-ENTRY_IMPLEMENT_MAIN(ExampleReflectiveShadowMap);
+ENTRY_IMPLEMENT_MAIN(ExampleRSM);