gl-util.h: Remove wrappers for things abstracted via GLMeta
This commit is contained in:
parent
bae977d4ab
commit
b8d861b4cd
|
@ -150,7 +150,7 @@ struct BitmapPrivate
|
||||||
|
|
||||||
void bindFBO()
|
void bindFBO()
|
||||||
{
|
{
|
||||||
FBO::bind(gl.fbo, FBO::Generic);
|
FBO::bind(gl.fbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushSetViewport(ShaderBase &shader) const
|
void pushSetViewport(ShaderBase &shader) const
|
||||||
|
@ -544,7 +544,7 @@ void Bitmap::blur()
|
||||||
glState.viewport.pushSet(IntRect(0, 0, width(), height()));
|
glState.viewport.pushSet(IntRect(0, 0, width(), height()));
|
||||||
|
|
||||||
TEX::bind(p->gl.tex);
|
TEX::bind(p->gl.tex);
|
||||||
FBO::bind(auxTex.fbo, FBO::Generic);
|
FBO::bind(auxTex.fbo);
|
||||||
|
|
||||||
pass1.bind();
|
pass1.bind();
|
||||||
pass1.setTexSize(Vec2i(width(), height()));
|
pass1.setTexSize(Vec2i(width(), height()));
|
||||||
|
@ -625,7 +625,7 @@ void Bitmap::radialBlur(int angle, int divisions)
|
||||||
|
|
||||||
TEXFBO newTex = shState->texPool().request(_width, _height);
|
TEXFBO newTex = shState->texPool().request(_width, _height);
|
||||||
|
|
||||||
FBO::bind(newTex.fbo, FBO::Generic);
|
FBO::bind(newTex.fbo);
|
||||||
|
|
||||||
glState.clearColor.pushSet(Vec4());
|
glState.clearColor.pushSet(Vec4());
|
||||||
FBO::clear();
|
FBO::clear();
|
||||||
|
@ -698,7 +698,7 @@ Color Bitmap::getPixel(int x, int y) const
|
||||||
{
|
{
|
||||||
p->allocSurface();
|
p->allocSurface();
|
||||||
|
|
||||||
FBO::bind(p->gl.fbo, FBO::Generic);
|
FBO::bind(p->gl.fbo);
|
||||||
|
|
||||||
glState.viewport.pushSet(IntRect(0, 0, width(), height()));
|
glState.viewport.pushSet(IntRect(0, 0, width(), height()));
|
||||||
|
|
||||||
|
@ -764,7 +764,7 @@ void Bitmap::hueChange(int hue)
|
||||||
shader.bind();
|
shader.bind();
|
||||||
shader.setHueAdjust(hueAdj);
|
shader.setHueAdjust(hueAdj);
|
||||||
|
|
||||||
FBO::bind(newTex.fbo, FBO::Generic);
|
FBO::bind(newTex.fbo);
|
||||||
p->pushSetViewport(shader);
|
p->pushSetViewport(shader);
|
||||||
p->bindTexture(shader);
|
p->bindTexture(shader);
|
||||||
|
|
||||||
|
@ -921,7 +921,7 @@ void Bitmap::drawText(const IntRect &rect, const char *str, int align)
|
||||||
GLMeta::blitBegin(p->gl);
|
GLMeta::blitBegin(p->gl);
|
||||||
GLMeta::blitSource(gpTF);
|
GLMeta::blitSource(gpTF);
|
||||||
GLMeta::blitRectangle(IntRect(0, 0, txtSurf->w, txtSurf->h),
|
GLMeta::blitRectangle(IntRect(0, 0, txtSurf->w, txtSurf->h),
|
||||||
posRect, FBO::Linear);
|
posRect, true);
|
||||||
GLMeta::blitEnd();
|
GLMeta::blitEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,10 @@ void subRectImageUpload(GLint srcW, GLint srcX, GLint srcY,
|
||||||
{
|
{
|
||||||
if (gl.unpack_subimage)
|
if (gl.unpack_subimage)
|
||||||
{
|
{
|
||||||
PixelStore::setupSubImage(srcW, srcX, srcY);
|
gl.PixelStorei(GL_UNPACK_ROW_LENGTH, srcW);
|
||||||
|
gl.PixelStorei(GL_UNPACK_SKIP_PIXELS, srcX);
|
||||||
|
gl.PixelStorei(GL_UNPACK_SKIP_ROWS, srcY);
|
||||||
|
|
||||||
TEX::uploadSubImage(dstX, dstY, dstW, dstH, src->pixels, format);
|
TEX::uploadSubImage(dstX, dstY, dstW, dstH, src->pixels, format);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -55,7 +58,11 @@ void subRectImageUpload(GLint srcW, GLint srcX, GLint srcY,
|
||||||
void subRectImageEnd()
|
void subRectImageEnd()
|
||||||
{
|
{
|
||||||
if (gl.unpack_subimage)
|
if (gl.unpack_subimage)
|
||||||
PixelStore::reset();
|
{
|
||||||
|
gl.PixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
||||||
|
gl.PixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
|
||||||
|
gl.PixelStorei(GL_UNPACK_SKIP_ROWS, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HAVE_NATIVE_VAO gl.GenVertexArrays
|
#define HAVE_NATIVE_VAO gl.GenVertexArrays
|
||||||
|
@ -78,11 +85,11 @@ void vaoInit(VAO &vao, bool keepBound)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_VAO)
|
if (HAVE_NATIVE_VAO)
|
||||||
{
|
{
|
||||||
vao.vao = ::VAO::gen();
|
gl.GenVertexArrays(1, &vao.nativeVAO);
|
||||||
::VAO::bind(vao.vao);
|
gl.BindVertexArray(vao.nativeVAO);
|
||||||
vaoBindRes(vao);
|
vaoBindRes(vao);
|
||||||
if (!keepBound)
|
if (!keepBound)
|
||||||
::VAO::unbind();
|
gl.BindVertexArray(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -97,13 +104,13 @@ void vaoInit(VAO &vao, bool keepBound)
|
||||||
void vaoFini(VAO &vao)
|
void vaoFini(VAO &vao)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_VAO)
|
if (HAVE_NATIVE_VAO)
|
||||||
::VAO::del(vao.vao);
|
gl.DeleteVertexArrays(1, &vao.nativeVAO);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vaoBind(VAO &vao)
|
void vaoBind(VAO &vao)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_VAO)
|
if (HAVE_NATIVE_VAO)
|
||||||
::VAO::bind(vao.vao);
|
gl.BindVertexArray(vao.nativeVAO);
|
||||||
else
|
else
|
||||||
vaoBindRes(vao);
|
vaoBindRes(vao);
|
||||||
}
|
}
|
||||||
|
@ -112,7 +119,7 @@ void vaoUnbind(VAO &vao)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_VAO)
|
if (HAVE_NATIVE_VAO)
|
||||||
{
|
{
|
||||||
::VAO::unbind();
|
gl.BindVertexArray(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -130,11 +137,11 @@ static void _blitBegin(FBO::ID fbo, const Vec2i &size)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_BLIT)
|
if (HAVE_NATIVE_BLIT)
|
||||||
{
|
{
|
||||||
FBO::bind(fbo, FBO::Draw);
|
gl.BindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo.gl);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FBO::bind(fbo, FBO::Generic);
|
FBO::bind(fbo);
|
||||||
glState.viewport.pushSet(IntRect(0, 0, size.x, size.y));
|
glState.viewport.pushSet(IntRect(0, 0, size.x, size.y));
|
||||||
|
|
||||||
SimpleShader &shader = shState->shaders().simple;
|
SimpleShader &shader = shState->shaders().simple;
|
||||||
|
@ -158,7 +165,7 @@ void blitSource(TEXFBO &source)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_BLIT)
|
if (HAVE_NATIVE_BLIT)
|
||||||
{
|
{
|
||||||
FBO::bind(source.fbo, FBO::Read);
|
gl.BindFramebuffer(GL_READ_FRAMEBUFFER, source.fbo.gl);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -168,29 +175,29 @@ void blitSource(TEXFBO &source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void blitRectangle(const IntRect &src, const Vec2i &dstPos, FBO::BlitMode mode)
|
void blitRectangle(const IntRect &src, const Vec2i &dstPos, bool smooth)
|
||||||
{
|
{
|
||||||
blitRectangle(src, IntRect(dstPos.x, dstPos.y, src.w, src.h), mode);
|
blitRectangle(src, IntRect(dstPos.x, dstPos.y, src.w, src.h), smooth);
|
||||||
}
|
}
|
||||||
|
|
||||||
void blitRectangle(const IntRect &src, const IntRect &dst, FBO::BlitMode mode)
|
void blitRectangle(const IntRect &src, const IntRect &dst, bool smooth)
|
||||||
{
|
{
|
||||||
if (HAVE_NATIVE_BLIT)
|
if (HAVE_NATIVE_BLIT)
|
||||||
{
|
{
|
||||||
FBO::blit(src.x, src.y, src.w, src.h,
|
gl.BlitFramebuffer(src.x, src.y, src.x+src.w, src.y+src.h,
|
||||||
dst.x, dst.y, dst.w, dst.h,
|
dst.x, dst.y, dst.x+dst.w, dst.y+dst.h,
|
||||||
mode);
|
GL_COLOR_BUFFER_BIT, smooth ? GL_LINEAR : GL_NEAREST);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mode == FBO::Linear)
|
if (smooth)
|
||||||
TEX::setSmooth(true);
|
TEX::setSmooth(true);
|
||||||
|
|
||||||
Quad &quad = shState->gpQuad();
|
Quad &quad = shState->gpQuad();
|
||||||
quad.setTexPosRect(src, dst);
|
quad.setTexPosRect(src, dst);
|
||||||
quad.draw();
|
quad.draw();
|
||||||
|
|
||||||
if (mode == FBO::Linear)
|
if (smooth)
|
||||||
TEX::setSmooth(false);
|
TEX::setSmooth(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ struct VAO
|
||||||
IBO::ID ibo;
|
IBO::ID ibo;
|
||||||
|
|
||||||
/* Don't touch */
|
/* Don't touch */
|
||||||
::VAO::ID vao;
|
GLuint nativeVAO;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class VertexType>
|
template<class VertexType>
|
||||||
|
@ -69,9 +69,9 @@ void blitBegin(TEXFBO &target);
|
||||||
void blitBeginScreen(const Vec2i &size);
|
void blitBeginScreen(const Vec2i &size);
|
||||||
void blitSource(TEXFBO &source);
|
void blitSource(TEXFBO &source);
|
||||||
void blitRectangle(const IntRect &src, const Vec2i &dstPos,
|
void blitRectangle(const IntRect &src, const Vec2i &dstPos,
|
||||||
FBO::BlitMode mode = FBO::Nearest);
|
bool smooth = false);
|
||||||
void blitRectangle(const IntRect &src, const IntRect &dst,
|
void blitRectangle(const IntRect &src, const IntRect &dst,
|
||||||
FBO::BlitMode mode = FBO::Nearest);
|
bool smooth = false);
|
||||||
void blitEnd();
|
void blitEnd();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
102
src/gl-util.h
102
src/gl-util.h
|
@ -105,19 +105,6 @@ namespace FBO
|
||||||
{
|
{
|
||||||
DEF_GL_ID
|
DEF_GL_ID
|
||||||
|
|
||||||
enum Mode
|
|
||||||
{
|
|
||||||
Draw = 0,
|
|
||||||
Read = 1,
|
|
||||||
Generic = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BlitMode
|
|
||||||
{
|
|
||||||
Nearest = 0,
|
|
||||||
Linear = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
inline ID gen()
|
inline ID gen()
|
||||||
{
|
{
|
||||||
ID id;
|
ID id;
|
||||||
|
@ -131,21 +118,14 @@ namespace FBO
|
||||||
gl.DeleteFramebuffers(1, &id.gl);
|
gl.DeleteFramebuffers(1, &id.gl);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void bind(ID id, Mode mode)
|
inline void bind(ID id)
|
||||||
{
|
{
|
||||||
static const GLenum modes[] =
|
gl.BindFramebuffer(GL_FRAMEBUFFER, id.gl);
|
||||||
{
|
|
||||||
GL_DRAW_FRAMEBUFFER,
|
|
||||||
GL_READ_FRAMEBUFFER,
|
|
||||||
GL_FRAMEBUFFER
|
|
||||||
};
|
|
||||||
|
|
||||||
gl.BindFramebuffer(modes[mode], id.gl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void unbind(Mode mode)
|
inline void unbind()
|
||||||
{
|
{
|
||||||
bind(ID(0), mode);
|
bind(ID(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setTarget(TEX::ID target, unsigned colorAttach = 0)
|
inline void setTarget(TEX::ID target, unsigned colorAttach = 0)
|
||||||
|
@ -153,66 +133,12 @@ namespace FBO
|
||||||
gl.FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + colorAttach, GL_TEXTURE_2D, target.gl, 0);
|
gl.FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + colorAttach, GL_TEXTURE_2D, target.gl, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void blit(int srcX, int srcY,
|
|
||||||
int srcW, int srcH,
|
|
||||||
int dstX, int dstY,
|
|
||||||
int dstW, int dstH,
|
|
||||||
BlitMode mode = Nearest)
|
|
||||||
{
|
|
||||||
static const GLenum modes[] =
|
|
||||||
{
|
|
||||||
GL_NEAREST,
|
|
||||||
GL_LINEAR
|
|
||||||
};
|
|
||||||
|
|
||||||
gl.BlitFramebuffer(srcX, srcY, srcX+srcW, srcY+srcH,
|
|
||||||
dstX, dstY, dstX+dstW, dstY+dstH,
|
|
||||||
GL_COLOR_BUFFER_BIT, modes[mode]);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void blit(int srcX, int srcY,
|
|
||||||
int dstX, int dstY,
|
|
||||||
int srcW, int srcH,
|
|
||||||
BlitMode mode = Nearest)
|
|
||||||
{
|
|
||||||
blit(srcX, srcY, srcW, srcH, dstX, dstY, srcW, srcH, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void clear()
|
inline void clear()
|
||||||
{
|
{
|
||||||
gl.Clear(GL_COLOR_BUFFER_BIT);
|
gl.Clear(GL_COLOR_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Vertex Array Object */
|
|
||||||
namespace VAO
|
|
||||||
{
|
|
||||||
DEF_GL_ID
|
|
||||||
|
|
||||||
inline ID gen()
|
|
||||||
{
|
|
||||||
ID id;
|
|
||||||
gl.GenVertexArrays(1, &id.gl);
|
|
||||||
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void del(ID id)
|
|
||||||
{
|
|
||||||
gl.DeleteVertexArrays(1, &id.gl);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void bind(ID id)
|
|
||||||
{
|
|
||||||
gl.BindVertexArray(id.gl);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void unbind()
|
|
||||||
{
|
|
||||||
bind(ID(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<GLenum target>
|
template<GLenum target>
|
||||||
struct GenericBO
|
struct GenericBO
|
||||||
{
|
{
|
||||||
|
@ -265,24 +191,6 @@ typedef struct GenericBO<GL_ELEMENT_ARRAY_BUFFER> IBO;
|
||||||
|
|
||||||
#undef DEF_GL_ID
|
#undef DEF_GL_ID
|
||||||
|
|
||||||
namespace PixelStore
|
|
||||||
{
|
|
||||||
/* Setup a 'glSubTexImage2D()' call where the uploaded image
|
|
||||||
* itself is part of a bigger image in client memory */
|
|
||||||
inline void setupSubImage(GLint imgWidth, GLint subX, GLint subY)
|
|
||||||
{
|
|
||||||
gl.PixelStorei(GL_UNPACK_ROW_LENGTH, imgWidth);
|
|
||||||
gl.PixelStorei(GL_UNPACK_SKIP_PIXELS, subX);
|
|
||||||
gl.PixelStorei(GL_UNPACK_SKIP_ROWS, subY);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset all states set with 'setupSubImage()' */
|
|
||||||
inline void reset()
|
|
||||||
{
|
|
||||||
setupSubImage(0, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convenience struct wrapping a framebuffer
|
/* Convenience struct wrapping a framebuffer
|
||||||
* and a 2D texture as its target */
|
* and a 2D texture as its target */
|
||||||
struct TEXFBO
|
struct TEXFBO
|
||||||
|
@ -319,7 +227,7 @@ struct TEXFBO
|
||||||
|
|
||||||
static inline void linkFBO(TEXFBO &obj)
|
static inline void linkFBO(TEXFBO &obj)
|
||||||
{
|
{
|
||||||
FBO::bind(obj.fbo, FBO::Draw);
|
FBO::bind(obj.fbo);
|
||||||
FBO::setTarget(obj.tex);
|
FBO::setTarget(obj.tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ struct PingPong
|
||||||
private:
|
private:
|
||||||
void bind()
|
void bind()
|
||||||
{
|
{
|
||||||
FBO::bind(rt[dstInd].fbo, FBO::Generic);
|
FBO::bind(rt[dstInd].fbo);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -513,7 +513,7 @@ struct GraphicsPrivate
|
||||||
{
|
{
|
||||||
GLMeta::blitRectangle(IntRect(0, 0, scRes.x, scRes.y),
|
GLMeta::blitRectangle(IntRect(0, 0, scRes.x, scRes.y),
|
||||||
IntRect(scOffset.x, scSize.y+scOffset.y, scSize.x, -scSize.y),
|
IntRect(scOffset.x, scSize.y+scOffset.y, scSize.x, -scSize.y),
|
||||||
threadData->config.smoothScaling ? FBO::Linear : FBO::Nearest);
|
threadData->config.smoothScaling);
|
||||||
}
|
}
|
||||||
|
|
||||||
void redrawScreen()
|
void redrawScreen()
|
||||||
|
@ -652,14 +652,14 @@ void Graphics::transition(int duration,
|
||||||
|
|
||||||
/* Draw the composed frame to a buffer first
|
/* Draw the composed frame to a buffer first
|
||||||
* (we need this because we're skipping PingPong) */
|
* (we need this because we're skipping PingPong) */
|
||||||
FBO::bind(p->transBuffer.fbo, FBO::Generic);
|
FBO::bind(p->transBuffer.fbo);
|
||||||
FBO::clear();
|
FBO::clear();
|
||||||
p->screenQuad.draw();
|
p->screenQuad.draw();
|
||||||
|
|
||||||
p->checkResize();
|
p->checkResize();
|
||||||
|
|
||||||
/* Then blit it flipped and scaled to the screen */
|
/* Then blit it flipped and scaled to the screen */
|
||||||
FBO::unbind(FBO::Generic);
|
FBO::unbind();
|
||||||
FBO::clear();
|
FBO::clear();
|
||||||
|
|
||||||
GLMeta::blitBeginScreen(Vec2i(p->winSize));
|
GLMeta::blitBeginScreen(Vec2i(p->winSize));
|
||||||
|
@ -716,7 +716,7 @@ void Graphics::wait(int duration)
|
||||||
|
|
||||||
void Graphics::fadeout(int duration)
|
void Graphics::fadeout(int duration)
|
||||||
{
|
{
|
||||||
FBO::unbind(FBO::Generic);
|
FBO::unbind();
|
||||||
|
|
||||||
for (int i = duration-1; i > -1; --i)
|
for (int i = duration-1; i > -1; --i)
|
||||||
{
|
{
|
||||||
|
@ -743,7 +743,7 @@ void Graphics::fadeout(int duration)
|
||||||
|
|
||||||
void Graphics::fadein(int duration)
|
void Graphics::fadein(int duration)
|
||||||
{
|
{
|
||||||
FBO::unbind(FBO::Generic);
|
FBO::unbind();
|
||||||
|
|
||||||
for (int i = 0; i < duration; ++i)
|
for (int i = 0; i < duration; ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -551,7 +551,7 @@ struct TilemapPrivate
|
||||||
TileAtlas::BlitVec blits = TileAtlas::calcBlits(atlas.efTilesetH, atlas.size);
|
TileAtlas::BlitVec blits = TileAtlas::calcBlits(atlas.efTilesetH, atlas.size);
|
||||||
|
|
||||||
/* Clear atlas */
|
/* Clear atlas */
|
||||||
FBO::bind(atlas.gl.fbo, FBO::Generic);
|
FBO::bind(atlas.gl.fbo);
|
||||||
glState.clearColor.pushSet(Vec4());
|
glState.clearColor.pushSet(Vec4());
|
||||||
glState.scissorTest.pushSet(false);
|
glState.scissorTest.pushSet(false);
|
||||||
|
|
||||||
|
|
|
@ -416,7 +416,7 @@ struct WindowPrivate
|
||||||
TEX::allocEmpty(baseTex.width, baseTex.height);
|
TEX::allocEmpty(baseTex.width, baseTex.height);
|
||||||
TEX::unbind();
|
TEX::unbind();
|
||||||
|
|
||||||
FBO::bind(baseTex.fbo, FBO::Generic);
|
FBO::bind(baseTex.fbo);
|
||||||
glState.viewport.pushSet(IntRect(0, 0, baseTex.width, baseTex.height));
|
glState.viewport.pushSet(IntRect(0, 0, baseTex.width, baseTex.height));
|
||||||
glState.clearColor.pushSet(Vec4());
|
glState.clearColor.pushSet(Vec4());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue