mirror of https://github.com/buggins/dlangui.git
Merge pull request #117 from g4z3r/master
template function to check for gl errors
This commit is contained in:
commit
839e9f7822
|
@ -445,8 +445,7 @@ private class GLImageCache {
|
||||||
// unset rotation
|
// unset rotation
|
||||||
glSupport.setRotation(rx, ry, 0);
|
glSupport.setRotation(rx, ry, 0);
|
||||||
// glMatrixMode(GL_PROJECTION);
|
// glMatrixMode(GL_PROJECTION);
|
||||||
// glPopMatrix();
|
// checkgl!glPopMatrix();
|
||||||
// checkError("pop matrix");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,14 +76,24 @@ static this() {
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Convenient wrapper around glGetError()
|
* Convenient wrapper around glGetError()
|
||||||
* TODO use one of the DEBUG extensions instead
|
* TODO use one of the DEBUG extensions
|
||||||
*/
|
*/
|
||||||
bool checkError(string context="", string file=__FILE__, int line=__LINE__)
|
/// Using: checkgl!glFunction(funcParams);
|
||||||
|
template checkgl(alias func)
|
||||||
|
{
|
||||||
|
debug auto checkgl(string functionName=__FUNCTION__, int line=__LINE__, Args...)(Args args)
|
||||||
|
{
|
||||||
|
scope(success) checkError(func.stringof, functionName, line);
|
||||||
|
return func(args);
|
||||||
|
} else
|
||||||
|
alias checkgl = func;
|
||||||
|
}
|
||||||
|
bool checkError(string context="", string functionName=__FUNCTION__, int line=__LINE__)
|
||||||
{
|
{
|
||||||
GLenum err = glGetError();
|
GLenum err = glGetError();
|
||||||
if (err != GL_NO_ERROR)
|
if (err != GL_NO_ERROR)
|
||||||
{
|
{
|
||||||
Log.e("OpenGL error ", errors.get(err, to!string(err)), " at ", file, ":", line, " -- ", context);
|
Log.e("OpenGL error ", errors.get(err, to!string(err)), " at ", functionName, ":", line, " -- ", context);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -194,8 +204,7 @@ class GLProgram {
|
||||||
}
|
}
|
||||||
initialized = true;
|
initialized = true;
|
||||||
Log.v("Program is initialized successfully");
|
Log.v("Program is initialized successfully");
|
||||||
glUseProgram(0);
|
checkgl!glUseProgram(0);
|
||||||
checkError("glUseProgram " ~ to!string(program));
|
|
||||||
return !error;
|
return !error;
|
||||||
}
|
}
|
||||||
bool initLocations() {
|
bool initLocations() {
|
||||||
|
@ -211,8 +220,7 @@ class GLProgram {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void release() {
|
void release() {
|
||||||
glUseProgram(0);
|
checkgl!glUseProgram(0);
|
||||||
checkError("glUseProgram(0)");
|
|
||||||
}
|
}
|
||||||
~this() {
|
~this() {
|
||||||
clear();
|
clear();
|
||||||
|
@ -272,16 +280,13 @@ class SolidFillProgram : GLProgram {
|
||||||
|
|
||||||
void beforeExecute() {
|
void beforeExecute() {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glDisable(GL_CULL_FACE);
|
checkgl!glDisable(GL_CULL_FACE);
|
||||||
checkError("glDisable(GL_CULL_FACE)");
|
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
//glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
//glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
checkError("glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)");
|
|
||||||
bind();
|
bind();
|
||||||
//glUniformMatrix4fv(matrixLocation, 1, false, m.value_ptr);
|
//glUniformMatrix4fv(matrixLocation, 1, false, m.value_ptr);
|
||||||
//glUniformMatrix4fv(matrixLocation, 1, false, matrix.ptr);
|
//glUniformMatrix4fv(matrixLocation, 1, false, matrix.ptr);
|
||||||
glUniformMatrix4fv(matrixLocation, 1, false, glSupport.qtmatrix.ptr);
|
checkgl!glUniformMatrix4fv(matrixLocation, 1, false, glSupport.qtmatrix.ptr);
|
||||||
checkError("glUniformMatrix4fv");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void afterExecute() {
|
void afterExecute() {
|
||||||
|
@ -294,16 +299,13 @@ class SolidFillProgram : GLProgram {
|
||||||
override bool initLocations() {
|
override bool initLocations() {
|
||||||
bool res = super.initLocations();
|
bool res = super.initLocations();
|
||||||
|
|
||||||
matrixLocation = glGetUniformLocation(program, "matrix");
|
matrixLocation = checkgl!glGetUniformLocation(program, toStringz("matrix"));
|
||||||
checkError("glGetUniformLocation matrix");
|
|
||||||
if (matrixLocation == -1)
|
if (matrixLocation == -1)
|
||||||
Log.e("glGetUniformLocation failed for matrixLocation");
|
Log.e("glGetUniformLocation failed for matrixLocation");
|
||||||
vertexLocation = glGetAttribLocation(program, "vertex");
|
vertexLocation = checkgl!glGetAttribLocation(program, toStringz("vertex"));
|
||||||
checkError("glGetAttribLocation vertex");
|
|
||||||
if (vertexLocation == -1)
|
if (vertexLocation == -1)
|
||||||
Log.e("glGetUniformLocation failed for vertexLocation");
|
Log.e("glGetUniformLocation failed for vertexLocation");
|
||||||
colAttrLocation = glGetAttribLocation(program, "colAttr");
|
colAttrLocation = checkgl!glGetAttribLocation(program, toStringz("colAttr"));
|
||||||
checkError("glGetAttribLocation colAttr");
|
|
||||||
if (colAttrLocation == -1)
|
if (colAttrLocation == -1)
|
||||||
Log.e("glGetUniformLocation failed for colAttrLocation");
|
Log.e("glGetUniformLocation failed for colAttrLocation");
|
||||||
return res && matrixLocation >= 0 && vertexLocation >= 0 && colAttrLocation >= 0;
|
return res && matrixLocation >= 0 && vertexLocation >= 0 && colAttrLocation >= 0;
|
||||||
|
@ -325,8 +327,7 @@ class SolidFillProgram : GLProgram {
|
||||||
glEnableVertexAttribArray(vertexLocation);
|
glEnableVertexAttribArray(vertexLocation);
|
||||||
glEnableVertexAttribArray(colAttrLocation);
|
glEnableVertexAttribArray(colAttrLocation);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableVertexAttribArray(vertexLocation);
|
glDisableVertexAttribArray(vertexLocation);
|
||||||
glDisableVertexAttribArray(colAttrLocation);
|
glDisableVertexAttribArray(colAttrLocation);
|
||||||
|
@ -356,8 +357,7 @@ class LineProgram : SolidFillProgram {
|
||||||
glEnableVertexAttribArray(vertexLocation);
|
glEnableVertexAttribArray(vertexLocation);
|
||||||
glEnableVertexAttribArray(colAttrLocation);
|
glEnableVertexAttribArray(colAttrLocation);
|
||||||
|
|
||||||
glDrawArrays(GL_LINES, 0, cast(int)vertices.length/3);
|
checkgl!glDrawArrays(GL_LINES, 0, cast(int)vertices.length/3);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableVertexAttribArray(vertexLocation);
|
glDisableVertexAttribArray(vertexLocation);
|
||||||
glDisableVertexAttribArray(colAttrLocation);
|
glDisableVertexAttribArray(colAttrLocation);
|
||||||
|
@ -429,8 +429,7 @@ class TextureProgram : SolidFillProgram {
|
||||||
glEnableVertexAttribArray(colAttrLocation);
|
glEnableVertexAttribArray(colAttrLocation);
|
||||||
glEnableVertexAttribArray(texCoordLocation);
|
glEnableVertexAttribArray(texCoordLocation);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableVertexAttribArray(vertexLocation);
|
glDisableVertexAttribArray(vertexLocation);
|
||||||
glDisableVertexAttribArray(colAttrLocation);
|
glDisableVertexAttribArray(colAttrLocation);
|
||||||
|
@ -486,17 +485,14 @@ class FontProgram : SolidFillProgram {
|
||||||
|
|
||||||
override void beforeExecute() {
|
override void beforeExecute() {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glDisable(GL_CULL_FACE);
|
checkgl!glDisable(GL_CULL_FACE);
|
||||||
checkError("glDisable(GL_CULL_FACE)");
|
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
//glBlendFunc(GL_ONE, GL_SRC_COLOR);
|
//glBlendFunc(GL_ONE, GL_SRC_COLOR);
|
||||||
//glBlendFunc(GL_ONE, GL_SRC_COLOR);
|
//glBlendFunc(GL_ONE, GL_SRC_COLOR);
|
||||||
//glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
//glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||||
//glBlendFunc(GL_ONE_MINUS_SRC_COLOR, GL_SRC_COLOR);
|
//glBlendFunc(GL_ONE_MINUS_SRC_COLOR, GL_SRC_COLOR);
|
||||||
checkError("glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR)");
|
|
||||||
bind();
|
bind();
|
||||||
glUniformMatrix4fv(matrixLocation, 1, false, glSupport.qtmatrix.ptr);
|
checkgl!glUniformMatrix4fv(matrixLocation, 1, false, glSupport.qtmatrix.ptr);
|
||||||
checkError("glUniformMatrix4fv");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override void afterExecute() {
|
override void afterExecute() {
|
||||||
|
@ -525,8 +521,7 @@ class FontProgram : SolidFillProgram {
|
||||||
glEnableVertexAttribArray(colAttrLocation);
|
glEnableVertexAttribArray(colAttrLocation);
|
||||||
glEnableVertexAttribArray(texCoordLocation);
|
glEnableVertexAttribArray(texCoordLocation);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, cast(int)vertices.length/3);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableVertexAttribArray(vertexLocation);
|
glDisableVertexAttribArray(vertexLocation);
|
||||||
glDisableVertexAttribArray(colAttrLocation);
|
glDisableVertexAttribArray(colAttrLocation);
|
||||||
|
@ -701,19 +696,13 @@ class GLSupport {
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
checkError("glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)");
|
checkgl!glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
checkgl!glEnableClientState(GL_COLOR_ARRAY);
|
||||||
checkError("glEnableClientState(GL_VERTEX_ARRAY)");
|
checkgl!glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
||||||
glEnableClientState(GL_COLOR_ARRAY);
|
checkgl!glColorPointer(4, GL_FLOAT, 0, cast(void*)colors);
|
||||||
checkError("glEnableClientState(GL_COLOR_ARRAY)");
|
|
||||||
glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
|
||||||
checkError("glVertexPointer(3, GL_FLOAT, 0, vertices)");
|
|
||||||
glColorPointer(4, GL_FLOAT, 0, cast(void*)colors);
|
|
||||||
checkError("glColorPointer(4, GL_FLOAT, 0, colors)");
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
checkError("glDrawArrays(GL_TRIANGLES, 0, 6)");
|
|
||||||
|
|
||||||
glDisableClientState(GL_COLOR_ARRAY);
|
glDisableClientState(GL_COLOR_ARRAY);
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
glDisableClientState(GL_VERTEX_ARRAY);
|
||||||
|
@ -771,24 +760,16 @@ class GLSupport {
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
checkError("glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)");
|
|
||||||
|
|
||||||
glEnableClientState(GL_COLOR_ARRAY);
|
checkgl!glEnableClientState(GL_COLOR_ARRAY);
|
||||||
checkError("glEnableClientState(GL_COLOR_ARRAY)");
|
checkgl!glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
checkgl!glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
checkError("glEnableClientState(GL_VERTEX_ARRAY)");
|
checkgl!glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
checkgl!glTexCoordPointer(2, GL_FLOAT, 0, cast(void*)texcoords.ptr);
|
||||||
checkError("glEnableClientState(GL_TEXTURE_COORD_ARRAY)");
|
checkgl!glColorPointer(4, GL_FLOAT, 0, cast(void*)colors.ptr);
|
||||||
glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
|
||||||
checkError("glVertexPointer(3, GL_FLOAT, 0, vertices)");
|
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, cast(void*)texcoords.ptr);
|
|
||||||
checkError("glTexCoordPointer(2, GL_FLOAT, 0, texcoords)");
|
|
||||||
glColorPointer(4, GL_FLOAT, 0, cast(void*)colors.ptr);
|
|
||||||
checkError("glColorPointer(4, GL_FLOAT, 0, colors)");
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
glDisableClientState(GL_VERTEX_ARRAY);
|
||||||
|
@ -843,24 +824,16 @@ class GLSupport {
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
checkError("glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)");
|
|
||||||
|
|
||||||
glEnableClientState(GL_COLOR_ARRAY);
|
checkgl!glEnableClientState(GL_COLOR_ARRAY);
|
||||||
checkError("glEnableClientState(GL_COLOR_ARRAY)");
|
checkgl!glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
checkgl!glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
checkError("glEnableClientState(GL_VERTEX_ARRAY)");
|
checkgl!glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
checkgl!glTexCoordPointer(2, GL_FLOAT, 0, cast(void*)texcoords.ptr);
|
||||||
checkError("glEnableClientState(GL_TEXTURE_COORD_ARRAY)");
|
checkgl!glColorPointer(4, GL_FLOAT, 0, cast(void*)colors.ptr);
|
||||||
glVertexPointer(3, GL_FLOAT, 0, cast(void*)vertices.ptr);
|
|
||||||
checkError("glVertexPointer(3, GL_FLOAT, 0, vertices)");
|
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, cast(void*)texcoords.ptr);
|
|
||||||
checkError("glTexCoordPointer(2, GL_FLOAT, 0, texcoords)");
|
|
||||||
glColorPointer(4, GL_FLOAT, 0, cast(void*)colors.ptr);
|
|
||||||
checkError("glColorPointer(4, GL_FLOAT, 0, colors)");
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
checkgl!glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
checkError("glDrawArrays");
|
|
||||||
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
glDisableClientState(GL_VERTEX_ARRAY);
|
||||||
|
@ -876,15 +849,13 @@ class GLSupport {
|
||||||
|
|
||||||
/// call glFlush
|
/// call glFlush
|
||||||
void flushGL() {
|
void flushGL() {
|
||||||
glFlush();
|
checkgl!glFlush();
|
||||||
checkError("glFlush");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setTextureImage(Tex2D texture, int dx, int dy, ubyte * pixels) {
|
bool setTextureImage(Tex2D texture, int dx, int dy, ubyte * pixels) {
|
||||||
//checkError("before setTextureImage");
|
checkError("before setTextureImage");
|
||||||
texture.setup();
|
texture.setup();
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
checkgl!glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
checkError("updateTexture - glPixelStorei");
|
|
||||||
texture.setSamplerParams(true, true);
|
texture.setSamplerParams(true, true);
|
||||||
|
|
||||||
// ORIGINAL: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dx, dy, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
// ORIGINAL: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dx, dy, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
@ -893,15 +864,13 @@ class GLSupport {
|
||||||
Log.e("Cannot set image for texture");
|
Log.e("Cannot set image for texture");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
checkError("after setTextureImage");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setTextureImageAlpha(Tex2D texture, int dx, int dy, ubyte * pixels) {
|
bool setTextureImageAlpha(Tex2D texture, int dx, int dy, ubyte * pixels) {
|
||||||
checkError("before setTextureImageAlpha");
|
checkError("before setTextureImageAlpha");
|
||||||
texture.setup();
|
texture.setup();
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
checkgl!glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
checkError("setTextureImageAlpha - glPixelStorei");
|
|
||||||
texture.setSamplerParams(true, true);
|
texture.setSamplerParams(true, true);
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, dx, dy, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, dx, dy, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
@ -910,7 +879,6 @@ class GLSupport {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
texture.unbind();
|
texture.unbind();
|
||||||
checkError("after setTextureImageAlpha");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -929,25 +897,19 @@ class GLSupport {
|
||||||
return false;
|
return false;
|
||||||
fbo = f;
|
fbo = f;
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, dx, dy, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, null);
|
checkgl!glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, dx, dy, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, null);
|
||||||
checkError("glTexImage2D");
|
|
||||||
|
|
||||||
texture.setSamplerParams(true, true);
|
texture.setSamplerParams(true, true);
|
||||||
|
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.ID, 0);
|
checkgl!glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.ID, 0);
|
||||||
checkError("glFramebufferTexture2D");
|
|
||||||
// Always check that our framebuffer is ok
|
// Always check that our framebuffer is ok
|
||||||
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
if(checkgl!glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
Log.e("glFramebufferTexture2D failed");
|
Log.e("glFramebufferTexture2D failed");
|
||||||
res = false;
|
res = false;
|
||||||
}
|
}
|
||||||
checkError("glCheckFramebufferStatus");
|
|
||||||
//glClearColor(0.5f, 0, 0, 1);
|
//glClearColor(0.5f, 0, 0, 1);
|
||||||
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
|
checkgl!glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
|
||||||
checkError("glClearColor");
|
checkgl!glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
checkError("glClear");
|
|
||||||
checkError("after createFramebuffer");
|
|
||||||
//CRLog::trace("CRGLSupportImpl::createFramebuffer %d,%d texture=%d, buffer=%d", dx, dy, textureId, framebufferId);
|
//CRLog::trace("CRGLSupportImpl::createFramebuffer %d,%d texture=%d, buffer=%d", dx, dy, textureId, framebufferId);
|
||||||
currentFBO = fbo;
|
currentFBO = fbo;
|
||||||
|
|
||||||
|
@ -1058,18 +1020,15 @@ class GLSupport {
|
||||||
|
|
||||||
if (_legacyMode) {
|
if (_legacyMode) {
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
//glPushMatrix();
|
//checkgl!glPushMatrix();
|
||||||
//checkError("glPushMatrix");
|
|
||||||
//glLoadIdentity();
|
//glLoadIdentity();
|
||||||
glLoadMatrixf(qtmatrix.ptr);
|
glLoadMatrixf(qtmatrix.ptr);
|
||||||
//glOrthof(0, _dx, 0, _dy, -1.0f, 1.0f);
|
//glOrthof(0, _dx, 0, _dy, -1.0f, 1.0f);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
//glPushMatrix();
|
//checkgl!glPushMatrix();
|
||||||
//checkError("glPushMatrix");
|
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
}
|
}
|
||||||
glViewport(view.left, view.top, view.right, view.bottom);
|
checkgl!glViewport(view.left, view.top, view.right, view.bottom);
|
||||||
checkError("glViewport");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane) {
|
void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane) {
|
||||||
|
@ -1086,15 +1045,13 @@ class GLObject(GLObjectTypes type, GLuint target = 0) {
|
||||||
private GLuint id;
|
private GLuint id;
|
||||||
|
|
||||||
this() {
|
this() {
|
||||||
mixin("glGen" ~ to!string(type) ~ "s(1, &id);");
|
mixin("checkgl!glGen" ~ to!string(type) ~ "s(1, &id);");
|
||||||
checkError("glGen" ~ to!string(type));
|
|
||||||
bind();
|
bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
~this() {
|
~this() {
|
||||||
unbind();
|
unbind();
|
||||||
mixin("glDelete" ~ to!string(type) ~ "s(1, &id);");
|
mixin("checkgl!glDelete" ~ to!string(type) ~ "s(1, &id);");
|
||||||
checkError("glDelete" ~ to!string(type));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bind() {
|
void bind() {
|
||||||
|
@ -1106,11 +1063,10 @@ class GLObject(GLObjectTypes type, GLuint target = 0) {
|
||||||
|
|
||||||
void unbind() {
|
void unbind() {
|
||||||
static if(target != 0)
|
static if(target != 0)
|
||||||
mixin("glBind" ~ to!string(type) ~ "(" ~ to!string(target) ~ ", 0);");
|
mixin("checkgl!glBind" ~ to!string(type) ~ "(" ~ to!string(target) ~ ", 0);");
|
||||||
else
|
else
|
||||||
mixin("glBind" ~ to!string(type) ~ "(0);");
|
mixin("checkgl!glBind" ~ to!string(type) ~ "(0);");
|
||||||
checkError("unbind " ~ to!string(type));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static if(type == GLObjectTypes.Buffer)
|
static if(type == GLObjectTypes.Buffer)
|
||||||
{
|
{
|
||||||
|
@ -1119,9 +1075,9 @@ class GLObject(GLObjectTypes type, GLuint target = 0) {
|
||||||
foreach(b; buffs)
|
foreach(b; buffs)
|
||||||
length += b.length;
|
length += b.length;
|
||||||
glBufferData(target,
|
glBufferData(target,
|
||||||
length * float.sizeof,
|
length * float.sizeof,
|
||||||
null,
|
null,
|
||||||
GL_STREAM_DRAW);
|
GL_STREAM_DRAW);
|
||||||
int offset;
|
int offset;
|
||||||
foreach(b; buffs) {
|
foreach(b; buffs) {
|
||||||
glBufferSubData(target,
|
glBufferSubData(target,
|
||||||
|
|
Loading…
Reference in New Issue