From addc68e9f5acfd9fc6b22d02b18bb82821b2dc4a Mon Sep 17 00:00:00 2001 From: Liran Date: Tue, 5 Jul 2011 08:27:41 +0300 Subject: [PATCH] GLES2 translator: fix point rendering if points are rendered the built in shader variable gl_PointSize should be active. added a call to enable VERTEX_PROGRAM_POINT_SIZE to signal opengl to activate this variable GL_POINT_SPRITE should also be enabled when rendering points Change-Id: Iba7f62844ee2208ae22700b985aef0229d75fc46 --- .../libs/Translator/GLES_V2/GLESv2Imp.cpp | 26 +++++++++++++++++++ .../libs/Translator/include/GLcommon/gldefs.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 5c950cf15..c0703b2ad 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "GLESv2Context.h" #include "GLESv2Validate.h" #include "ShaderParser.h" @@ -453,7 +454,20 @@ GL_APICALL void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei coun GLESConversionArrays tmpArrs; ctx->setupArraysPointers(tmpArrs,first,count,0,NULL,true); + + //Enable texture generation for GL_POINTS and gl_PointSize shader variable + //GLES2 assumes this is enabled by default, we need to set this state for GL + if (mode==GL_POINTS) { + ctx->dispatcher().glEnable(GL_POINT_SPRITE); + ctx->dispatcher().glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + } + ctx->dispatcher().glDrawArrays(mode,first,count); + + if (mode==GL_POINTS) { + ctx->dispatcher().glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); + ctx->dispatcher().glDisable(GL_POINT_SPRITE); + } } GL_APICALL void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* elementsIndices){ @@ -469,7 +483,19 @@ GL_APICALL void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum t GLESConversionArrays tmpArrs; ctx->setupArraysPointers(tmpArrs,0,count,type,indices,false); + + //See glDrawArrays + if (mode==GL_POINTS) { + ctx->dispatcher().glEnable(GL_POINT_SPRITE); + ctx->dispatcher().glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + } + ctx->dispatcher().glDrawElements(mode,count,type,indices); + + if (mode==GL_POINTS) { + ctx->dispatcher().glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); + ctx->dispatcher().glDisable(GL_POINT_SPRITE); + } } GL_APICALL void GL_APIENTRY glEnable(GLenum cap){ diff --git a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/gldefs.h b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/gldefs.h index 1cba3bf3e..adefffa0e 100644 --- a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/gldefs.h +++ b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/gldefs.h @@ -25,3 +25,5 @@ typedef double GLdouble; /* double precision float */ #define GL_INT 0x1404 #define GL_HALF_FLOAT_NV 0x140B #define GL_HALF_FLOAT 0x140B +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_POINT_SPRITE 0x8861