#include <GLES2/gl2.h>
#endif
+#if defined(__ANDROID__) || defined(__ODROID__)
+#if !defined(_GLES)
+ #define _GLES
+#endif
+ #include <GLES/gl.h>
+#endif
+
#if !defined(__ANDROID__) && !defined(__EMSCRIPTEN__) && !defined(__ODROID__)
# if defined(SHADERS)
//# include "gl_core_3_3.h"
#endif
-#if defined(ES1_1) || defined(ES2) || defined(SHADERS)
+#if defined(_GLES) || defined(_GLES2) || defined(SHADERS)
#undef glRecti
#undef glBegin
#define DM_TEXCOORD_NORMSHIFT (13)
#define DM_TEXCOORD_NORMFACTOR (8192.0 /*f*/)
+#ifdef SHADERS
static GLuint dmCreateShader( GLenum type, const char *shadersource, const char *optionstring )
{
GLuint shader;
return shader;
}
-
static bool dmCreateProgram( DMProgram program, const char *vertexsource, const char *fragmentsource, char *optionstring )
{
GLint status;
;
////
-
+#endif
static void matrixOrtho( float *m, float left, float right, float bottom, float top, float nearval, float farval )
{
DMProgram *program = &shaderPrograms[ programIndex ];
if( !program->flags.valid)
{
+#ifdef SHADERS
glUseProgram( 0 );
+#endif
return 0;
}
+#ifdef SHADERS
glUseProgram( program->glProgram );
+#endif
if( program->lastUpdateCount != this.updateCount )
{
+#ifdef SHADERS
glUniformMatrix4fv( program->matrixloc, 1, GL_FALSE, this.matrix );
glUniform1i( program->texbaseloc, 0 );
+#endif
program->lastUpdateCount = this.updateCount;
}
-
return program;
}
DMImage *image, *bindimage;
Texture texture, bindTexture;
DMDrawBuffer *drawBuffer;
- DMDrawVertexFlat *vboVertex;
+ DMDrawVertexFlat *vboVertex = null;
DMProgram *program;
ERRORCHECK();
drawBuffer = &this.drawBuffer[drawBufferIndex];
drawBufferIndex = ( drawBufferIndex + 1 ) % DM_CONTEXT_DRAW_BUFFER_COUNT;
glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
vboVertex = glMapBuffer( GL_ARRAY_BUFFER, GL_WRITE_ONLY );
+#endif
vertexCount = 0;
glActiveTexture( GL_TEXTURE0 );
{
if( vertexCount )
{
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glUnmapBuffer( GL_ARRAY_BUFFER );
+#endif
// Flush font manager texture updates
flush( );
// Render buffered images
drawBuffer = &this.drawBuffer[drawBufferIndex];
drawBufferIndex = ( drawBufferIndex + 1 ) % DM_CONTEXT_DRAW_BUFFER_COUNT;
glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
vboVertex = glMapBuffer( GL_ARRAY_BUFFER, GL_WRITE_ONLY );
+#endif
vertexCount = 0;
}
vertexCount += 6;
}
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glUnmapBuffer( GL_ARRAY_BUFFER );
+#endif
// Flush font manager texture updates
flush();
}
#endif
- void flushRenderDrawBuffer( DMDrawBuffer drawBuffer, DMProgram program, int vertexCount )
+#ifdef SHADERS
+ static void flushRenderDrawBuffer( DMDrawBuffer drawBuffer, DMProgram program, int vertexCount )
{
glabCurArrayBuffer = 0;
glFlush();
#endif
}
+#endif
- void flushDrawImages( )
+#ifdef SHADERS
+ static void flushDrawImages( )
{
int index, stateblend, vertexcount, flushflag, programIndex;
float vx0, vx1, vx2, vx3, vy0, vy1, vy2, vy3;
DMImage *image, *bindimage;
Texture texture, bindtexture;
DMDrawBuffer *drawBuffer;
- DMDrawVertex *vboVertex;
+ DMDrawVertex *vboVertex = null;
DMProgram *program;
glabCurArrayBuffer = 0;
this.drawBufferIndex = ( this.drawBufferIndex + 1 ) % DM_CONTEXT_DRAW_BUFFER_COUNT;
glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
vboVertex = glMapBuffer( GL_ARRAY_BUFFER, GL_WRITE_ONLY );
#endif
vertexcount = 0;
{
if( vertexcount )
{
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glUnmapBuffer( GL_ARRAY_BUFFER );
#endif
// Flush font manager texture updates
drawBuffer = &this.drawBuffer[this.drawBufferIndex];
this.drawBufferIndex = ( this.drawBufferIndex + 1 ) % DM_CONTEXT_DRAW_BUFFER_COUNT;
glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
vboVertex = glMapBuffer( GL_ARRAY_BUFFER, GL_WRITE_ONLY );
#endif
vertexcount = 0;
vertexcount += 6;
}
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glUnmapBuffer( GL_ARRAY_BUFFER );
#endif
// Flush font manager texture updates
ERRORCHECK();
}
}
+#endif
public:
bool init( DrawManagerFlags flags )
{
- int drawBufferIndex, programIndex;
+ int drawBufferIndex;
DMDrawBuffer *drawBuffer;
uint vertexSize;
vertexSize = sizeof(DMDrawVertexFlat);
else
{
+#ifdef SHADERS
DMProgram *program;
+ int programIndex;
for( programIndex = 0 ; programIndex < DM_PROGRAM_COUNT ; programIndex++ )
{
program = &shaderPrograms[ programIndex ];
return false;
// glUseProgram( 0 );
vertexSize = sizeof(DMDrawVertex);
+#endif
}
for( drawBufferIndex = 0 ; drawBufferIndex < DM_CONTEXT_DRAW_BUFFER_COUNT ; drawBufferIndex++ )
{
int mindex;
float norminv;
+#ifdef SHADERS
if(!flags.prehistoricOpenGL && !prevProgram)
glGetIntegerv(GL_CURRENT_PROGRAM, (GLint *)&prevProgram);
+#endif
// while(glGetError());
// ERRORCHECK();
// Save OpenGL state
// FIXME: no glPushAttrib() in core profile
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glPushClientAttrib( GL_CLIENT_ALL_ATTRIB_BITS );
glPushAttrib( GL_ALL_ATTRIB_BITS );
#endif
void flushImages( )
{
-#if !defined(__EMSCRIPTEN__)
- if( flags.prehistoricOpenGL )
- flushDrawImagesArchaic( );
- else
+#if !defined(_GLES2)
+ if(flags.prehistoricOpenGL)
+ flushDrawImagesArchaic();
+#endif
+
+#if defined(SHADERS)
+ if(!flags.prehistoricOpenGL)
+ flushDrawImages( );
#endif
- flushDrawImages( );
}
void finish()
if(vboAvailable)
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glabCurArrayBuffer = 0;
+#ifdef SHADERS
if( !flags.prehistoricOpenGL )
glUseProgram( prevProgram );
+#endif
// Restore OpenGL state
// FIXME: no glPushAttrib() in core profile
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2) // TODO:
glPopAttrib();
glPopClientAttrib();
#endif
#include <GLES2/gl2.h>
#endif
+#if defined(__ANDROID__) || defined(__ODROID__)
+#if !defined(_GLES)
+ #define _GLES
+#endif
+ #include <GLES/gl.h>
+#endif
+
#include "cc.h"
#include "mm.h"
{
if(texture)
{
-#if defined(SHADERS) && !defined(__EMSCRIPTEN__)
+#if defined(SHADERS) && !defined(_GLES2)
int glformat = GL_RED;
#else
int glformat = GL_ALPHA;
int h = rect[3] - rect[1];
if( channelcount == 1 );
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2)
else if( channelcount == 2 )
glformat = GL_RG;
#endif
glformat = GL_RGBA;
// FIXME: no glPushAttrib() in core profile
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2)
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
glPushAttrib( GL_TEXTURE_BIT );
#endif
glBindTexture( GL_TEXTURE_2D, texture.glTex );
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2)
glPixelStorei( GL_UNPACK_ROW_LENGTH, textureWidth );
glPixelStorei( GL_UNPACK_SKIP_PIXELS, rect[0] );
glPixelStorei( GL_UNPACK_SKIP_ROWS, rect[1] );
#endif
glTexSubImage2D( GL_TEXTURE_2D, 0, rect[0], rect[1], w, h, glformat, GL_UNSIGNED_BYTE, data );
-#if !defined(__EMSCRIPTEN__)
+#if !defined(_GLES) && !defined(_GLES2)
glPopAttrib();
glPopClientAttrib();
#endif