1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Replace rectAttrib::color by uniform.

This commit is contained in:
Sergey Lipskiy 2017-02-28 15:25:25 +07:00
parent cf8cc76ff9
commit eebdd32932
12 changed files with 50 additions and 47 deletions

View File

@ -244,7 +244,6 @@ namespace graphics {
{
DrawModeParam mode;
u32 verticesCount = 0;
std::array<f32, 4> rectColor;
RectVertex * vertices = nullptr;
const CombinerProgram * combiner = nullptr;
};

View File

@ -355,17 +355,17 @@ public:
{
m_part =
"IN highp vec4 aRectPosition; \n"
"IN lowp vec4 aRectColor; \n"
"IN highp vec2 aTexCoord0; \n"
"IN highp vec2 aTexCoord1; \n"
" \n"
"OUT lowp vec4 vShadeColor; \n"
"OUT mediump vec2 vTexCoord0; \n"
"OUT mediump vec2 vTexCoord1; \n"
"uniform lowp vec4 uRectColor; \n"
"void main() \n"
"{ \n"
" gl_Position = aRectPosition; \n"
" vShadeColor = aRectColor; \n"
" vShadeColor = uRectColor; \n"
" vTexCoord0 = aTexCoord0; \n"
" vTexCoord1 = aTexCoord1; \n"
;
@ -387,13 +387,13 @@ public:
{
m_part =
"IN highp vec4 aRectPosition; \n"
"IN lowp vec4 aRectColor; \n"
" \n"
"OUT lowp vec4 vShadeColor; \n"
"uniform lowp vec4 uRectColor; \n"
"void main() \n"
"{ \n"
" gl_Position = aRectPosition; \n"
" vShadeColor = aRectColor; \n"
" vShadeColor = uRectColor; \n"
;
if (!_glinfo.isGLESX) {
m_part +=

View File

@ -638,6 +638,22 @@ private:
fUniform uK5;
};
class URectColor : public UniformGroup
{
public:
URectColor(GLuint _program) {
LocateUniform(uRectColor);
}
void update(bool _force) override
{
uRectColor.set(&gDP.rectColor.r, _force);
}
private:
fv4Uniform uRectColor;
};
class UTextureSize : public UniformGroup
{
public:
@ -772,8 +788,10 @@ void CombinerProgramUniformFactory::buildUniforms(GLuint _program,
if (config.generalEmulation.enableNoise != 0)
_uniforms.emplace_back(new UNoiseTex(_program));
if (!m_glInfo.isGLES2)
if (!m_glInfo.isGLES2) {
_uniforms.emplace_back(new UDepthTex(_program));
_uniforms.emplace_back(new UDepthScale(_program));
}
if (_inputs.usesTexture()) {
_uniforms.emplace_back(new UTextures(_program));
@ -820,9 +838,6 @@ void CombinerProgramUniformFactory::buildUniforms(GLuint _program,
_uniforms.emplace_back(new UAlphaTestInfo(_program));
if (!m_glInfo.isGLES2)
_uniforms.emplace_back(new UDepthScale(_program));
if (config.frameBufferEmulation.N64DepthCompare != 0)
_uniforms.emplace_back(new UDepthInfo(_program));
@ -834,6 +849,9 @@ void CombinerProgramUniformFactory::buildUniforms(GLuint _program,
_uniforms.emplace_back(new UColors(_program));
if (_key.isRectKey())
_uniforms.emplace_back(new URectColor(_program));
if (_inputs.usesHwLighting())
_uniforms.emplace_back(new ULights(_program));
}

View File

@ -9,7 +9,6 @@ void Utils::locateAttributes(GLuint _program, bool _rect, bool _textures)
{
if (_rect) {
glBindAttribLocation(_program, opengl::rectAttrib::position, "aRectPosition");
glBindAttribLocation(_program, opengl::rectAttrib::color, "aRectColor");
if (_textures) {
glBindAttribLocation(_program, opengl::rectAttrib::texcoord0, "aTexCoord0");
glBindAttribLocation(_program, opengl::rectAttrib::texcoord1, "aTexCoord1");

View File

@ -3,18 +3,17 @@
namespace opengl {
namespace triangleAttrib {
const GLuint position = 1U;
const GLuint color = 2U;
const GLuint texcoord = 3U;
const GLuint numlights = 4U;
const GLuint modify = 5U;
const GLuint position = 0U;
const GLuint color = 1U;
const GLuint texcoord = 2U;
const GLuint numlights = 3U;
const GLuint modify = 4U;
}
// Rect attributes
namespace rectAttrib {
const GLuint position = 6U;
const GLuint color = 7U;
const GLuint texcoord0 = 8U;
const GLuint texcoord1 = 9U;
const GLuint position = 5U;
const GLuint texcoord0 = 6U;
const GLuint texcoord1 = 7U;
}
}

View File

@ -15,7 +15,6 @@ namespace opengl {
// Rect attributes
namespace rectAttrib {
extern const GLuint position;
extern const GLuint color;
extern const GLuint texcoord0;
extern const GLuint texcoord1;
}

View File

@ -28,7 +28,6 @@ BufferedDrawer::BufferedDrawer(const GLInfo & _glinfo, CachedVertexAttribArray *
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::position, true);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::texcoord0, true);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::texcoord1, true);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::color, false);
glVertexAttribPointer(rectAttrib::position, 4, GL_FLOAT, GL_FALSE, sizeof(RectVertex), (const GLvoid *)(offsetof(RectVertex, x)));
glVertexAttribPointer(rectAttrib::texcoord0, 2, GL_FLOAT, GL_FALSE, sizeof(RectVertex), (const GLvoid *)(offsetof(RectVertex, s0)));
glVertexAttribPointer(rectAttrib::texcoord1, 2, GL_FLOAT, GL_FALSE, sizeof(RectVertex), (const GLvoid *)(offsetof(RectVertex, s1)));
@ -134,8 +133,6 @@ void BufferedDrawer::drawRects(const graphics::Context::DrawRectParameters & _pa
{
_updateRectBuffer(_params);
glVertexAttrib4fv(rectAttrib::color, _params.rectColor.data());
glDrawArrays(GLenum(_params.mode), m_rectsBuffers.vbo.pos - _params.verticesCount, _params.verticesCount);
}

View File

@ -17,7 +17,6 @@ UnbufferedDrawer::UnbufferedDrawer(const GLInfo & _glinfo, CachedVertexAttribArr
m_cachedAttribArray->enableVertexAttribArray(triangleAttrib::modify, false);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::position, false);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::color, false);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::texcoord0, false);
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::texcoord1, false);
@ -97,8 +96,6 @@ void UnbufferedDrawer::drawRects(const graphics::Context::DrawRectParameters & _
glVertexAttribPointer(rectAttrib::position, 4, GL_FLOAT, GL_FALSE, sizeof(RectVertex), ptr);
}
glVertexAttrib4fv(rectAttrib::color, _params.rectColor.data());
if (_params.combiner->usesTile(0)) {
m_cachedAttribArray->enableVertexAttribArray(rectAttrib::texcoord0, true);
const void * ptr = &_params.vertices->s0;

View File

@ -835,6 +835,14 @@ void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry, float *_pC
if (!_canDraw())
return;
if (gDP.otherMode.cycleType == G_CYC_FILL) {
gDP.rectColor.r = _pColor[0];
gDP.rectColor.g = _pColor[1];
gDP.rectColor.b = _pColor[2];
gDP.rectColor.a = _pColor[3];
} else {
gDP.rectColor = gDPInfo::Color();
}
gSP.changed &= ~CHANGED_GEOMETRYMODE; // Don't update cull mode
if (gSP.changed || gDP.changed)
_updateStates(DrawingState::Rect);
@ -879,10 +887,6 @@ void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry, float *_pC
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLE_STRIP;
if (gDP.otherMode.cycleType == G_CYC_FILL)
std::copy_n(_pColor, 4, rectParams.rectColor.begin());
else
rectParams.rectColor.fill(0.0f);
rectParams.verticesCount = 4;
rectParams.vertices = m_rect;
rectParams.combiner = currentCombiner();
@ -1052,7 +1056,6 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
{
gSP.changed &= ~CHANGED_GEOMETRYMODE; // Don't update cull mode
m_drawingState = DrawingState::TexRect;
f32 alpha = 0.0f;
if (!m_texrectDrawer.isEmpty()) {
CombinerInfo & cmbInfo = CombinerInfo::get();
@ -1061,19 +1064,16 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
_updateTextures();
cmbInfo.updateParameters();
} else {
gDP.rectColor = gDPInfo::Color();
if (gDP.otherMode.cycleType < G_CYC_COPY) {
if (gDP.combine.mA0 == G_ACMUX_0 && gDP.combine.aA0 == G_ACMUX_SHADE)
gDP.rectColor.a = 1.0f;
}
if (_params.texrectCmd && (gSP.changed | gDP.changed) != 0)
_updateStates(DrawingState::TexRect);
gfxContext.enable(enable::CULL_FACE, false);
if (CombinerInfo::get().isChanged()) {
if (currentCombiner()->usesShade()) {
gDPCombine combine;
combine.mux = currentCombiner()->getKey().getMux();
if (combine.mA0 == G_ACMUX_0 && combine.aA0 == G_ACMUX_SHADE)
alpha = 1.0f;
}
}
if (_params.texrectCmd && texturedRectSpecial != nullptr && texturedRectSpecial(_params)) {
gSP.changed |= CHANGED_GEOMETRYMODE;
return;
@ -1253,8 +1253,6 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLE_STRIP;
rectParams.rectColor.fill(0.0f);
rectParams.rectColor[3] = alpha;
rectParams.verticesCount = 4;
rectParams.vertices = m_rect;
rectParams.combiner = currentCombiner();
@ -1466,7 +1464,6 @@ void GraphicsDrawer::copyTexturedRect(const CopyRectParams & _params)
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLE_STRIP;
rectParams.rectColor.fill(0.0f);
rectParams.verticesCount = 4;
rectParams.vertices = m_rect;
rectParams.combiner = _params.combiner;

View File

@ -173,7 +173,6 @@ void TexrectDrawer::add()
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLE_STRIP;
rectParams.rectColor.fill(0.0f);
rectParams.verticesCount = 4;
rectParams.vertices = pRect;
rectParams.combiner = currentCombiner();
@ -286,7 +285,6 @@ bool TexrectDrawer::draw()
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLE_STRIP;
rectParams.rectColor.fill(0.0f);
rectParams.verticesCount = 4;
rectParams.vertices = rect;
rectParams.combiner = m_programTex.get();

View File

@ -344,7 +344,6 @@ void TextDrawer::drawText(const char *_pText, float _x, float _y) const
Context::DrawRectParameters rectParams;
rectParams.mode = drawmode::TRIANGLES;
rectParams.rectColor.fill(0.0f);
rectParams.verticesCount = coords.size();
rectParams.vertices = coords.data();
rectParams.combiner = m_program.get();

View File

@ -191,8 +191,9 @@ struct gDPInfo
struct Color
{
Color() : r(0), g(0), b(0), a(0) {}
f32 r, g, b, a;
} fogColor, blendColor, envColor;
} fogColor, blendColor, envColor, rectColor;
struct
{