فهرست منبع

Vertex color support in VBOs when useVertexColors on Mesh set to true, Color + overloading

Ivan Safrin 14 سال پیش
والد
کامیت
c02b27e9e0

+ 12 - 0
Core/Contents/Include/PolyColor.h

@@ -80,6 +80,18 @@ namespace Polycode {
 				return Color(nr, ng, nb, na);
 			}	
 			
+			/** 
+			* Adds the color to another color.
+			*/
+			inline Color operator + ( const Color& v2) const {
+				Number nr = r + v2.r;
+				Number ng = g + v2.g;
+				Number nb = b + v2.b;
+				Number na = a + v2.a;				
+				return Color(nr, ng, nb, na);
+			}	
+			
+			
 			bool operator == (const Color& c2) {
 				return (((int)255.0*r) == ((int)255.0*c2.r) && ((int)255.0*g) == ((int)255.0*c2.g) && ((int)255.0*b) == ((int)255.0*c2.b) && ((int)255.0*a) == ((int)255.0*c2.a));
 			}

+ 1 - 1
Core/Contents/Include/PolyGLRenderer.h

@@ -125,7 +125,7 @@ namespace Polycode {
 		void enableAlphaTest(bool val);
 		
 		void createVertexBufferForMesh(Mesh *mesh);
-		void drawVertexBuffer(VertexBuffer *buffer);						
+		void drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer);						
 		void bindFrameBufferTexture(Texture *texture);
 		void unbindFramebuffers();
 		

+ 1 - 1
Core/Contents/Include/PolyRenderer.h

@@ -160,7 +160,7 @@ namespace Polycode {
 		virtual void setDepthFunction(int depthFunction) = 0;
 				
 		virtual void createVertexBufferForMesh(Mesh *mesh) = 0;
-		virtual void drawVertexBuffer(VertexBuffer *buffer) = 0;
+		virtual void drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) = 0;
 		
 		void setRenderMode(int newRenderMode);
 		int getRenderMode();

+ 2 - 2
Core/Contents/Include/PolySceneEntity.h

@@ -22,7 +22,7 @@ THE SOFTWARE.
 
 #pragma once
 #include "PolyEntity.h"
-#include "PolyEventHandler.h"
+#include "PolyEventDispatcher.h"
 
 namespace Polycode {
 
@@ -30,7 +30,7 @@ namespace Polycode {
 	* 3D base entity. SceneEntities are the base class for all 3D entities in Polycode. A thin wrapper around Entity, it inherits most of its functionality.
 	@see Entity
 	*/
-	class _PolyExport SceneEntity : public Entity, public EventHandler {
+	class _PolyExport SceneEntity : public Entity, public EventDispatcher {
 		public:
 			SceneEntity();
 			virtual ~SceneEntity();

+ 11 - 5
Core/Contents/Source/PolyGLRenderer.cpp

@@ -340,16 +340,19 @@ void OpenGLRenderer::createVertexBufferForMesh(Mesh *mesh) {
 	mesh->setVertexBuffer(buffer);
 }
 
-void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer) {
+void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer, bool enableColorBuffer) {
 	OpenGLVertexBuffer *glVertexBuffer = (OpenGLVertexBuffer*)buffer;
 
 	glEnableClientState(GL_VERTEX_ARRAY);		
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 	glEnableClientState(GL_NORMAL_ARRAY);	
-//	glEnableClientState(GL_COLOR_ARRAY);		
+	
+	if(enableColorBuffer)  {
+		glEnableClientState(GL_COLOR_ARRAY);				
 		
-//	glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getColorBufferID());
-//	glTexCoordPointer( 4, GL_FLOAT, 0, (char *) NULL );	
+		glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getColorBufferID());
+		glColorPointer( 4, GL_FLOAT, 0, (char *) NULL );	
+	}
 	glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getVertexBufferID());
 	glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );	
 	glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getNormalBufferID());
@@ -409,7 +412,10 @@ void OpenGLRenderer::drawVertexBuffer(VertexBuffer *buffer) {
 	glDisableClientState( GL_VERTEX_ARRAY);	
 	glDisableClientState( GL_TEXTURE_COORD_ARRAY );		
 	glDisableClientState( GL_NORMAL_ARRAY );
-//	glDisableClientState( GL_COLOR_ARRAY );	
+	
+	if(enableColorBuffer) {
+		glDisableClientState( GL_COLOR_ARRAY );	
+	}
 }
 
 void OpenGLRenderer::enableFog(bool enable) {

+ 1 - 1
Core/Contents/Source/PolySceneEntity.cpp

@@ -24,7 +24,7 @@
 
 using namespace Polycode;
 
-SceneEntity::SceneEntity() : EventHandler(), Entity() {
+SceneEntity::SceneEntity() : EventDispatcher(), Entity() {
 	castShadows = true;
 }
 

+ 1 - 1
Core/Contents/Source/PolySceneMesh.cpp

@@ -236,7 +236,7 @@ void SceneMesh::Render() {
 	}
 	
 	if(useVertexBuffer) {
-		renderer->drawVertexBuffer(mesh->getVertexBuffer());
+		renderer->drawVertexBuffer(mesh->getVertexBuffer(), mesh->useVertexColors);
 	} else {
 		renderMeshLocally();
 	}