mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-08-18 06:55:48 +03:00
GLES2 backend working.
Everything is working in the iOS port!
This commit is contained in:
8
Makefile
8
Makefile
@@ -344,13 +344,7 @@ endif
|
||||
|
||||
ifeq ($(BUILD_OS), linux)
|
||||
|
||||
ifeq ($(GLES2),yes)
|
||||
LINUXLGL = -lGLESv2
|
||||
else
|
||||
LINUXLGL = -lGL
|
||||
endif
|
||||
|
||||
LIBS = -lrt -lpthread -lX11 -lopenal $(LINUXLGL) -lXcursor $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(LIBFREETYPE2)
|
||||
LIBS = -lrt -lpthread -lX11 -lopenal -lGL -lXcursor $(LIBSNDFILE) $(SDL_BACKEND_LINK) $(ALLEGRO_BACKEND_LINK) $(LIBFREETYPE2)
|
||||
OTHERINC = $(INCFREETYPE2)
|
||||
PLATFORMSRC = $(wildcard ./src/window/platform/x11/*.cpp) $(wildcard ./src/system/platform/posix/*.cpp)
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ void cBatchRenderer::Flush() {
|
||||
|
||||
Uint32 alloc = sizeof(eeVertex) * NumVertex;
|
||||
|
||||
GLi->VertexPointer ( 2, GL_FP , sizeof(eeVertex), reinterpret_cast<char*> ( &mVertex[0] ) , alloc );
|
||||
GLi->VertexPointer ( 2, GL_FP , sizeof(eeVertex), reinterpret_cast<char*> ( &mVertex[0] ) , alloc );
|
||||
GLi->ColorPointer ( 4, GL_UNSIGNED_BYTE , sizeof(eeVertex), reinterpret_cast<char*> ( &mVertex[0] ) + sizeof(eeVector2f) + sizeof(eeTexCoord) , alloc );
|
||||
|
||||
if ( NULL != mTexture ) {
|
||||
|
||||
@@ -6,19 +6,29 @@
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
bool cFrameBufferFBO::IsSupported() {
|
||||
#ifdef EE_GLES2
|
||||
return true;
|
||||
#elif defined( EE_GLES1 )
|
||||
return false
|
||||
#else
|
||||
return 0 != GLi->IsExtension( EEGL_EXT_framebuffer_object );
|
||||
#endif
|
||||
}
|
||||
|
||||
cFrameBufferFBO::cFrameBufferFBO( Window::cWindow * window ) :
|
||||
cFrameBuffer( window ),
|
||||
mFrameBuffer(0),
|
||||
mDepthBuffer(0)
|
||||
mDepthBuffer(0),
|
||||
mLastFB(0),
|
||||
mLastRB(0)
|
||||
{}
|
||||
|
||||
cFrameBufferFBO::cFrameBufferFBO( const Uint32& Width, const Uint32& Height, bool DepthBuffer, Window::cWindow * window ) :
|
||||
cFrameBuffer( window ),
|
||||
mFrameBuffer(0),
|
||||
mDepthBuffer(0)
|
||||
mDepthBuffer(0),
|
||||
mLastFB(0),
|
||||
mLastRB(0)
|
||||
{
|
||||
Create( Width, Height, DepthBuffer );
|
||||
}
|
||||
@@ -64,12 +74,12 @@ bool cFrameBufferFBO::Create( const Uint32& Width, const Uint32& Height, bool De
|
||||
|
||||
glGenFramebuffersEXT( 1, &frameBuffer );
|
||||
|
||||
mFrameBuffer = static_cast<unsigned int>( frameBuffer );
|
||||
mFrameBuffer = static_cast<Int32>( frameBuffer );
|
||||
|
||||
if ( !mFrameBuffer)
|
||||
return false;
|
||||
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mFrameBuffer );
|
||||
BindFrameBuffer();
|
||||
|
||||
if ( DepthBuffer ) {
|
||||
GLuint depth = 0;
|
||||
@@ -101,19 +111,19 @@ bool cFrameBufferFBO::Create( const Uint32& Width, const Uint32& Height, bool De
|
||||
glFramebufferTexture2DEXT( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTexture->Handle(), 0 );
|
||||
|
||||
if ( glCheckFramebufferStatusEXT( GL_FRAMEBUFFER ) != GL_FRAMEBUFFER_COMPLETE ) {
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, 0 );
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mLastFB );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, 0 );
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mLastFB );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void cFrameBufferFBO::Bind() {
|
||||
if ( mFrameBuffer ) {
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mFrameBuffer );
|
||||
BindFrameBuffer();
|
||||
SetBufferView();
|
||||
}
|
||||
}
|
||||
@@ -121,7 +131,7 @@ void cFrameBufferFBO::Bind() {
|
||||
void cFrameBufferFBO::Unbind() {
|
||||
if ( mFrameBuffer ) {
|
||||
RecoverView();
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, 0 );
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mLastFB );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,4 +139,13 @@ void cFrameBufferFBO::Reload() {
|
||||
Create( mWidth, mHeight, mHasDepthBuffer );
|
||||
}
|
||||
|
||||
void cFrameBufferFBO::BindFrameBuffer() {
|
||||
GLint curFB;
|
||||
glGetIntegerv( GL_FRAMEBUFFER_BINDING, &curFB );
|
||||
|
||||
mLastFB = (Int32)curFB;
|
||||
|
||||
glBindFramebufferEXT( GL_FRAMEBUFFER, mFrameBuffer );
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
@@ -29,6 +29,10 @@ class EE_API cFrameBufferFBO : public cFrameBuffer {
|
||||
protected:
|
||||
Int32 mFrameBuffer;
|
||||
Uint32 mDepthBuffer;
|
||||
Int32 mLastFB;
|
||||
Int32 mLastRB;
|
||||
|
||||
void BindFrameBuffer();
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
@@ -125,7 +125,7 @@ void cShader::EnsureVersion() {
|
||||
if ( GLi->Version() == GLv_3 ) {
|
||||
mSource = "#version 150\nuniform int dgl_TexActive = 1;\ninvariant in vec4 gl_Color;\ninvariant in vec4 gl_TexCoord[ 4 ];\nout vec4 gl_FragColor;\n" + mSource;
|
||||
} else {
|
||||
mSource = "uniform int dgl_TexActive;\nvarying vec4 gl_Color;\nvarying vec4 gl_TexCoord[ 4 ];\n" + mSource;
|
||||
mSource = "precision highp float;\nprecision highp int;\nuniform int dgl_TexActive;\nvarying vec4 gl_Color;\nvarying vec4 gl_TexCoord[ 4 ];\n" + mSource;
|
||||
}
|
||||
|
||||
if ( GLi->Version() == GLv_3 ) {
|
||||
@@ -208,11 +208,11 @@ bool cShader::Compile() {
|
||||
glGetShaderInfoLog( GetId(), logarraysize, &logsize, reinterpret_cast<GLchar*>( &mCompileLog[0] ) );
|
||||
}
|
||||
|
||||
cLog::instance()->Write( "Couldn't compile shader " + GetName() + ". Log follows:" );
|
||||
cLog::instance()->Write( "Couldn't compile shader " + GetName() + ". Log follows:\n" );
|
||||
cLog::instance()->Write( mCompileLog );
|
||||
cLog::instance()->Write( mSource );
|
||||
} else {
|
||||
cLog::instance()->Write( "Shader " + GetName() + " loaded Succesfully" );
|
||||
cLog::instance()->Write( "Shader " + GetName() + " compiled succesfully" );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -147,6 +147,8 @@ void cShaderProgram::Init() {
|
||||
mValid = false;
|
||||
mUniformLocations.clear();
|
||||
mAttributeLocations.clear();
|
||||
} else {
|
||||
cLog::instance()->Write( "cShaderProgram::Init() " + mName + ": Couldn't create program." );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,7 +212,7 @@ bool cShaderProgram::Link() {
|
||||
#endif
|
||||
|
||||
if ( !mValid ) {
|
||||
cLog::instance()->Write( "cShaderProgram::Link() " + mName + ": Couldn't link program. Log follows:" + mLinkLog );
|
||||
cLog::instance()->Write( "cShaderProgram::Link() " + mName + ": Couldn't link program. Log follows:\n" + mLinkLog );
|
||||
} else {
|
||||
if ( mLinkLog.size() ) {
|
||||
cLog::instance()->Write( "cShaderProgram::Link() " + mName + ": Program linked, but recibed some log:\n" + mLinkLog );
|
||||
|
||||
@@ -151,7 +151,13 @@ bool cGL::PointSpriteSupported() {
|
||||
}
|
||||
|
||||
bool cGL::ShadersSupported() {
|
||||
#ifdef EE_GLES2
|
||||
return true;
|
||||
#elif defined( EE_GLES1 )
|
||||
return false;
|
||||
#else
|
||||
return IsExtension( EEGL_ARB_shading_language_100 ) && IsExtension( EEGL_ARB_shader_objects ) && IsExtension( EEGL_ARB_vertex_shader ) && IsExtension( EEGL_ARB_fragment_shader );
|
||||
#endif
|
||||
}
|
||||
|
||||
Uint32 cGL::GetTextureParamEnum( const EE_TEXTURE_PARAM& Type ) {
|
||||
@@ -355,7 +361,10 @@ std::string cGL::GetVersion() {
|
||||
std::string cGL::GetShadingLanguageVersion() {
|
||||
if ( ShadersSupported() ) {
|
||||
#ifdef GL_SHADING_LANGUAGE_VERSION
|
||||
return std::string( reinterpret_cast<const char*> ( cGL::instance()->GetString( GL_SHADING_LANGUAGE_VERSION ) ) );
|
||||
char * str = cGL::instance()->GetString( GL_SHADING_LANGUAGE_VERSION );
|
||||
|
||||
if ( NULL != str )
|
||||
return std::string( reinterpret_cast<const char*> ( str ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,8 @@ const char * EEGL_PLANES_NAME[] = {
|
||||
|
||||
const GLchar * EEGL_SHADER_BASE_VS[] = {
|
||||
"#define MAX_CLIP_PLANES 6\n",
|
||||
"precision highp float;\n",
|
||||
"precision highp int;\n",
|
||||
"uniform mat4 dgl_ProjectionMatrix;\n",
|
||||
"uniform mat4 dgl_ModelViewMatrix;\n",
|
||||
"uniform int dgl_ClippingEnabled;\n",
|
||||
@@ -82,6 +84,7 @@ const GLchar * EEGL_SHADER_BASE_VS[] = {
|
||||
const GLchar * EEGL_SHADER_BASE_FS[] = {
|
||||
"#define MAX_CLIP_PLANES 6\n",
|
||||
"precision highp float;\n",
|
||||
"precision highp int;\n",
|
||||
"uniform sampler2D textureUnit0;\n",
|
||||
"uniform int dgl_TexActive;\n",
|
||||
"uniform int dgl_PointSpriteActive;\n",
|
||||
@@ -243,6 +246,10 @@ void cRendererGL3::SetShader( cShaderProgram * Shader ) {
|
||||
return;
|
||||
}
|
||||
|
||||
DisableClientState( GL_VERTEX_ARRAY );
|
||||
DisableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
DisableClientState( GL_COLOR_ARRAY );
|
||||
|
||||
mShaderPrev = mCurShader;
|
||||
mCurShader = Shader;
|
||||
mProjectionMatrix_id = mCurShader->UniformLocation( "dgl_ProjectionMatrix" );
|
||||
@@ -298,12 +305,9 @@ void cRendererGL3::Enable( GLenum cap ) {
|
||||
switch ( cap ) {
|
||||
case GL_TEXTURE_2D:
|
||||
{
|
||||
if ( !glIsEnabled( cap ) ) {
|
||||
mTexActive = 1;
|
||||
mCurShader->SetUniform( mTexActiveLoc, mTexActive );
|
||||
}
|
||||
|
||||
break;
|
||||
mTexActive = 1;
|
||||
mCurShader->SetUniform( mTexActiveLoc, mTexActive );
|
||||
return;
|
||||
}
|
||||
case GL_CLIP_PLANE0:
|
||||
case GL_CLIP_PLANE1:
|
||||
@@ -337,12 +341,9 @@ void cRendererGL3::Disable ( GLenum cap ) {
|
||||
switch ( cap ) {
|
||||
case GL_TEXTURE_2D:
|
||||
{
|
||||
if ( glIsEnabled( cap ) ) {
|
||||
mTexActive = 0;
|
||||
mCurShader->SetUniform( mTexActiveLoc, mTexActive );
|
||||
}
|
||||
|
||||
break;
|
||||
mTexActive = 0;
|
||||
mCurShader->SetUniform( mTexActiveLoc, mTexActive );
|
||||
return;
|
||||
}
|
||||
case GL_CLIP_PLANE0:
|
||||
case GL_CLIP_PLANE1:
|
||||
@@ -656,9 +657,7 @@ void cRendererGL3::VertexPointer ( GLint size, GLenum type, GLsizei stride, cons
|
||||
glBindBufferARB( GL_ARRAY_BUFFER, mVBO[ EEGL_VERTEX_ARRAY ] );
|
||||
glBufferSubDataARB( GL_ARRAY_BUFFER, 0, allocate, pointer );
|
||||
|
||||
#ifdef EE_GLES2
|
||||
glEnableVertexAttribArray( index );
|
||||
#endif
|
||||
|
||||
glVertexAttribPointerARB( index, size, type, GL_FALSE, stride, 0 );
|
||||
}
|
||||
@@ -683,19 +682,13 @@ void cRendererGL3::ColorPointer ( GLint size, GLenum type, GLsizei stride, const
|
||||
glBindBufferARB( GL_ARRAY_BUFFER, mVBO[ EEGL_COLOR_ARRAY ] );
|
||||
glBufferSubDataARB( GL_ARRAY_BUFFER, 0, allocate, pointer );
|
||||
|
||||
#ifdef EE_GLES2
|
||||
glEnableVertexAttribArray( index );
|
||||
#endif
|
||||
|
||||
if ( type == GL_UNSIGNED_BYTE ) {
|
||||
glVertexAttribPointerARB( index, size, type, GL_TRUE, stride, 0 );
|
||||
} else {
|
||||
glVertexAttribPointerARB( index, size, type, GL_FALSE, stride, 0 );
|
||||
}
|
||||
} else {
|
||||
#ifdef EE_GLES2
|
||||
glDisableVertexAttribArray( index );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -718,15 +711,9 @@ void cRendererGL3::TexCoordPointer ( GLint size, GLenum type, GLsizei stride, co
|
||||
glBindBufferARB( GL_ARRAY_BUFFER, mCurTexCoordArray );
|
||||
glBufferSubDataARB( GL_ARRAY_BUFFER, 0, allocate, pointer );
|
||||
|
||||
#ifdef EE_GLES2
|
||||
glEnableVertexAttribArray( index );
|
||||
#endif
|
||||
|
||||
glVertexAttribPointerARB( index, size, type, GL_FALSE, stride, 0 );
|
||||
} else {
|
||||
#ifdef EE_GLES2
|
||||
glDisableVertexAttribArray( index );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ void cEETest::Init() {
|
||||
|
||||
eePolygon2f Poly = CreateRoundedPolygon<eeFloat>( 0, 0, 256, 50 );
|
||||
|
||||
mVBO = cVertexBuffer::Create( VERTEX_FLAG_GET( VERTEX_FLAG_POSITION ) | VERTEX_FLAG_GET( VERTEX_FLAG_COLOR ), DM_POLYGON );
|
||||
mVBO = cVertexBuffer::Create( VERTEX_FLAG_GET( VERTEX_FLAG_POSITION ) | VERTEX_FLAG_GET( VERTEX_FLAG_COLOR ), DM_TRIANGLE_FAN );
|
||||
|
||||
if ( NULL != mVBO ) {
|
||||
for ( Uint32 i = 0; i < Poly.Size(); i++ ) {
|
||||
|
||||
Reference in New Issue
Block a user