Bläddra i källkod

Material stage runs without GL error but nothing is shown

Panagiotis Christopoulos Charitos 15 år sedan
förälder
incheckning
dd34ff4cfd
5 ändrade filer med 19 tillägg och 11 borttagningar
  1. 1 0
      shaders/Final.glsl
  2. 1 1
      src/Main.cpp
  3. 1 0
      src/Renderer/Ms.cpp
  4. 10 7
      src/Renderer/Renderer.cpp
  5. 6 3
      src/Renderer/Renderer.h

+ 1 - 0
shaders/Final.glsl

@@ -15,6 +15,7 @@ void main()
 	//if( gl_FragCoord.x > 0.5 ) discard;
 
 	fragColor.rgb = texture2D(rasterImage, vTexCoords).rgb;
+	fragColor.rgb = fragColor.rgb * vec3(1.0, 0.0, 1.0) + vec3(1.0, 0.0, 1.0);
 
 
 	//gl_FragColor.rgb = vec3(texture2D(rasterImage, vTexCoords).r);

+ 1 - 1
src/Main.cpp

@@ -385,7 +385,7 @@ int main(int argc, char* argv[])
 	}
 	catch(std::exception& e)
 	{
-		MESSAGE("Error: " + e.what());
+		MESSAGE("Fatal error: " + e.what());
 		//abort();
 		return 1;
 	}

+ 1 - 0
src/Renderer/Ms.cpp

@@ -115,4 +115,5 @@ void Ms::run()
 	}
 
 	fbo.unbind();
+	ON_GL_FAIL_THROW_EXCEPTION();
 }

+ 10 - 7
src/Renderer/Renderer.cpp

@@ -14,6 +14,7 @@ float Renderer::quadVertCoords [][2] = { {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.
 int Renderer::maxColorAtachments = -1;
 
 Vbo* Renderer::quadPositionsVbo = NULL;
+Vbo* Renderer::quadVertIndecesVbo = NULL;
 Vao* Renderer::globalVao = NULL;
 
 
@@ -55,13 +56,18 @@ void Renderer::init(const RendererInitializer& initializer)
 	pps.init(initializer);
 	bs.init(initializer);*/
 
-	// VBOs
+	// quad VBOs and VAO
 	if(quadPositionsVbo == NULL)
 	{
 		float quadVertCoords[][2] = {{1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.0, 0.0}};
 		quadPositionsVbo = new Vbo(GL_ARRAY_BUFFER, sizeof(quadVertCoords), quadVertCoords, GL_STATIC_DRAW);
+
+		ushort quadVertIndeces[2][3] = {{0, 1, 2}, {1, 2, 3}};
+		quadVertIndecesVbo = new Vbo(GL_ELEMENT_ARRAY_BUFFER, sizeof(quadVertIndeces), quadVertIndeces, GL_STATIC_DRAW);
+
 		globalVao = new Vao();
-		globalVao->attachArrayBufferVbo(*quadPositionsVbo, 0, 4, GL_FLOAT, false, 0, 0);
+		globalVao->attachArrayBufferVbo(*quadPositionsVbo, 0, 4, GL_FLOAT, false, 0, NULL);
+		globalVao->attachElementArrayBufferVbo(*quadVertIndecesVbo);
 	}
 }
 
@@ -93,11 +99,8 @@ void Renderer::render(Camera& cam_)
 void Renderer::drawQuad(int vertCoordsAttribLoc)
 {
 	RASSERT_THROW_EXCEPTION(vertCoordsAttribLoc == -1);
-	quadPositionsVbo->bind();
-	glEnableVertexAttribArray(vertCoordsAttribLoc);
-	glVertexAttribPointer(vertCoordsAttribLoc, 2, GL_FLOAT, false, 0, NULL);
-	glDrawArrays(GL_QUADS, 0, 4);
-	glDisableVertexAttribArray(vertCoordsAttribLoc);
+	glDrawElements(GL_TRIANGLES, 2 * 3, GL_UNSIGNED_SHORT, 0);
+	ON_GL_FAIL_THROW_EXCEPTION();
 }
 
 

+ 6 - 3
src/Renderer/Renderer.h

@@ -97,8 +97,7 @@ class Renderer: public Object
 		/// @param cam Needed for some matrices
 		void setupMaterial(const class Material& mtl, const SceneNode& sceneNode, const Camera& cam);
 
-
-		/// Draws a quad
+		/// Draws a quad. Actually it draws 2 triangles because OpenGL will no longer support quads
 		/// @param vertCoordsAttribLoc The attribute location of the vertex positions
 		static void drawQuad(int vertCoordsAttribLoc);
 
@@ -115,8 +114,12 @@ class Renderer: public Object
 	// Protected                                                                                                         =
 	//====================================================================================================================
 	private:
+		/// @name For drawing a quad into the active framebuffer
+		/// @{
 		static Vbo* quadPositionsVbo; ///< The VBO for quad positions
-		static Vao* globalVao; ///< This VAO is used everywhere
+		static Vbo* quadVertIndecesVbo; ///< The VBO for quad array buffer elements
+		static Vao* globalVao; ///< This VAO is used everywhere except material stage
+		/// @}
 };
 
 #endif