Rollback to fix rendering.

This commit is contained in:
Martín Lucas Golini
2026-07-25 20:26:24 -03:00
parent 27a57960f4
commit c0debbee9f
12 changed files with 56 additions and 54 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

@@ -362,8 +362,6 @@ class EE_API Renderer {
void waitForIdle();
protected:
static const Vector3ff& textureColorChannel( Int32 mode );
static Renderer* sSingleton;
enum RendererStateFlags {
@@ -14,6 +14,8 @@ class EE_API RendererGL : public Renderer {
~RendererGL();
void init();
GraphicsLibraryVersion version();
std::string versionStr();
@@ -64,8 +64,6 @@ class EE_API RendererGLShader : public Renderer {
int mTextureColorMode_id;
int mTextureColorChannel_id;
Int32 mTextureColorMode;
ShaderProgram* mTextureColorPreviousShader;
bool mUsingTextureColorFallbackShader;
unsigned int mCurrentMode;
ShaderProgram* mCurShader;
ShaderProgram* mShaderPrev;
+1 -11
View File
@@ -483,8 +483,7 @@ bool Renderer::drawSubpixelArrays( unsigned int mode, int first, int count ) {
Uint8 previousColorMask[4];
getColorMask( previousColorMask );
for ( Int32 channel = 0; channel < 3; ++channel ) {
if ( channel != 0 )
setTextureColorMode( channel + 1 );
setTextureColorMode( channel + 1 );
colorMask( channel == 0 && previousColorMask[0], channel == 1 && previousColorMask[1],
channel == 2 && previousColorMask[2], 0 );
drawArrays( mode, first, count );
@@ -590,15 +589,6 @@ bool Renderer::setTextureColorMode( Int32 ) {
return false;
}
const Vector3ff& Renderer::textureColorChannel( Int32 mode ) {
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
return channels[mode];
}
bool Renderer::isLineSmooth() {
return BitOp::readBitKey( &mStateFlags, RSF_LINE_SMOOTH );
}
+10 -3
View File
@@ -61,6 +61,10 @@ RendererGL::RendererGL() {
RendererGL::~RendererGL() {}
void RendererGL::init() {
Renderer::init();
}
bool RendererGL::ensureSubpixelShader() {
#ifndef EE_GLES1
if ( mSubpixelShader )
@@ -117,8 +121,6 @@ bool RendererGL::setTextureColorMode( Int32 mode ) {
#ifdef EE_GLES1
return false;
#else
if ( mode < 0 || mode > 4 )
return false;
if ( mode != 0 && !ensureSubpixelShader() )
return false;
if ( !mSubpixelShader || !mSubpixelShader->isValid() || mSubpixelChannelLoc == -1 )
@@ -134,7 +136,12 @@ bool RendererGL::setTextureColorMode( Int32 mode ) {
Renderer::setShader( mSubpixelShader.get() );
mUsingSubpixelShader = true;
}
mSubpixelShader->setUniform( mSubpixelChannelLoc, textureColorChannel( mode ) );
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
mSubpixelShader->setUniform( mSubpixelChannelLoc, channels[mode] );
return true;
#endif
}
+6 -1
View File
@@ -173,7 +173,12 @@ void RendererGL3::setShader( ShaderProgram* Shader ) {
if ( mTextureColorMode_id != -1 )
mCurShader->setUniform( mTextureColorMode_id, mTextureColorMode );
if ( mTextureColorChannel_id != -1 && mTextureColorMode != 0 ) {
mCurShader->setUniform( mTextureColorChannel_id, textureColorChannel( mTextureColorMode ) );
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
mCurShader->setUniform( mTextureColorChannel_id, channels[mTextureColorMode] );
}
if ( -1 != mAttribsLoc[EEGL_VERTEX_ARRAY] )
+6 -1
View File
@@ -200,7 +200,12 @@ void RendererGL3CP::setShader( ShaderProgram* Shader ) {
if ( mTextureColorMode_id != -1 )
mCurShader->setUniform( mTextureColorMode_id, mTextureColorMode );
if ( mTextureColorChannel_id != -1 && mTextureColorMode != 0 ) {
mCurShader->setUniform( mTextureColorChannel_id, textureColorChannel( mTextureColorMode ) );
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
mCurShader->setUniform( mTextureColorChannel_id, channels[mTextureColorMode] );
}
if ( -1 != mAttribsLoc[EEGL_VERTEX_ARRAY] )
+6 -1
View File
@@ -227,7 +227,12 @@ void RendererGLES2::setShader( ShaderProgram* Shader ) {
if ( mTextureColorMode_id != -1 )
mCurShader->setUniform( mTextureColorMode_id, mTextureColorMode );
if ( mTextureColorChannel_id != -1 && mTextureColorMode != 0 ) {
mCurShader->setUniform( mTextureColorChannel_id, textureColorChannel( mTextureColorMode ) );
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
mCurShader->setUniform( mTextureColorChannel_id, channels[mTextureColorMode] );
}
if ( -1 != mAttribsLoc[EEGL_VERTEX_ARRAY] )
@@ -11,8 +11,6 @@ RendererGLShader::RendererGLShader() :
mTextureColorMode_id( -1 ),
mTextureColorChannel_id( -1 ),
mTextureColorMode( 0 ),
mTextureColorPreviousShader( nullptr ),
mUsingTextureColorFallbackShader( false ),
mCurrentMode( 0 ),
mCurShader( NULL ),
mShaderPrev( NULL ) {
@@ -27,31 +25,20 @@ RendererGLShader::~RendererGLShader() {
}
bool RendererGLShader::setTextureColorMode( Int32 mode ) {
if ( mode < 0 || mode > 4 )
if ( mTextureColorMode_id == -1 )
return false;
if ( mode != 0 && ( mTextureColorMode_id == -1 || mTextureColorChannel_id == -1 ) ) {
mTextureColorPreviousShader = mCurShader;
setShader( static_cast<ShaderProgram*>( nullptr ) );
if ( mTextureColorMode_id == -1 || mTextureColorChannel_id == -1 ) {
setShader( mTextureColorPreviousShader );
mTextureColorPreviousShader = nullptr;
return false;
}
mUsingTextureColorFallbackShader = true;
}
if ( mTextureColorMode != mode ) {
mTextureColorMode = mode;
mCurShader->setUniform( mTextureColorMode_id, mode );
if ( mTextureColorChannel_id != -1 ) {
mCurShader->setUniform( mTextureColorChannel_id, textureColorChannel( mode ) );
static const Vector3ff channels[] = { { 0.f, 0.f, 0.f },
{ 1.f, 0.f, 0.f },
{ 0.f, 1.f, 0.f },
{ 0.f, 0.f, 1.f },
{ 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } };
mCurShader->setUniform( mTextureColorChannel_id, channels[mode] );
}
}
if ( mode == 0 && mUsingTextureColorFallbackShader ) {
ShaderProgram* previousShader = mTextureColorPreviousShader;
mTextureColorPreviousShader = nullptr;
mUsingTextureColorFallbackShader = false;
setShader( previousShader );
}
return true;
}
+6 -11
View File
@@ -1732,7 +1732,8 @@ void Text::draw( const Float& X, const Float& Y, const Vector2f& scale, const Fl
return;
unsigned int numvert = mVertices.size();
const bool containsSubpixel = !mRenderModes.empty();
const bool containsSubpixel = std::find( mRenderModes.begin(), mRenderModes.end(),
GlyphRenderMode::Subpixel ) != mRenderModes.end();
const Float drawX = containsSubpixel && rotation == 0.f && scale == 1.f ? std::trunc( X ) : X;
const Float drawY = containsSubpixel && rotation == 0.f && scale == 1.f ? std::trunc( Y ) : Y;
@@ -2681,9 +2682,8 @@ void Text::setFillColor( const std::vector<Color>& colors ) {
// Add an underline or strikethrough line to the vertex array
void Text::addLine( std::vector<VertexCoords>& vertices, Float lineLength, Float lineTop,
Float offset, Float thickness, Float outlineThickness, Int32 centerDiffX ) {
auto& renderModes = &vertices == &mOutlineVertices ? mOutlineRenderModes : mRenderModes;
if ( !renderModes.empty() )
renderModes.push_back( GlyphRenderMode::Mask );
( &vertices == &mOutlineVertices ? mOutlineRenderModes : mRenderModes )
.push_back( GlyphRenderMode::Mask );
Float top = std::floor( lineTop + offset - ( thickness / 2 ) + 0.5f );
Float bottom = top + std::floor( thickness + 0.5f );
Float u1 = 0;
@@ -2759,13 +2759,8 @@ void Text::addLine( std::vector<VertexCoords>& vertices, Float lineLength, Float
void Text::addGlyphQuad( std::vector<VertexCoords>& vertices, Vector2f position,
const EE::Graphics::Glyph& glyph, Float italic, Float outlineThickness,
Int32 centerDiffX ) {
auto& renderModes = &vertices == &mOutlineVertices ? mOutlineRenderModes : mRenderModes;
if ( glyph.renderMode == GlyphRenderMode::Subpixel && renderModes.empty() )
renderModes.resize( vertices.size() / GLi->quadVertex(), GlyphRenderMode::Mask );
if ( !renderModes.empty() )
renderModes.push_back( glyph.renderMode == GlyphRenderMode::Subpixel
? GlyphRenderMode::Subpixel
: GlyphRenderMode::Mask );
( &vertices == &mOutlineVertices ? mOutlineRenderModes : mRenderModes )
.push_back( glyph.renderMode );
if ( glyph.renderMode == GlyphRenderMode::Subpixel )
position = position.trunc();
Float padding = 1.0;
+12 -2
View File
@@ -77,7 +77,7 @@ UTEST( FontRendering, glyphAdvanceDoesNotCreateTexturePages ) {
UTEST( FontRendering, subpixelCoverageCompositesPerChannel ) {
UIApplication app(
WindowSettings( 360, 120, "eepp - Subpixel Text Test", WindowStyle::Default,
WindowSettings( 360, 220, "eepp - Subpixel Text Test", WindowStyle::Default,
WindowBackend::Default, 32 ),
UIApplication::Settings( Sys::getProcessPath() + ".." + FileSystem::getOSSlash(), 1 ) );
ResourceScope& scope = *app.getUI()->getResourceScope();
@@ -103,7 +103,16 @@ UTEST( FontRendering, subpixelCoverageCompositesPerChannel ) {
Text retained( "Subpixel retained", font.get(), 28 );
retained.setFillColor( Color::Black );
retained.draw( 8.f, 60.f );
retained.draw( 8.f, 52.f );
Primitives primitives;
primitives.setColor( Color( 40, 42, 54 ) );
primitives.drawRectangle( Rectf( Vector2f( 0.f, 110.f ), Sizef( 360.f, 110.f ) ) );
const Color lightText( 248, 248, 242 );
Text::draw( String( "Subpixel static light" ), { 8.f, 114.f }, font.get(), 28, lightText );
retained.setString( "Subpixel retained light" );
retained.setFillColor( lightText );
retained.draw( 8.f, 162.f );
Image image = window->getFrontBufferImage();
auto hasColoredCoverage = [&image]( Uint32 top, Uint32 bottom ) {
@@ -122,6 +131,7 @@ UTEST( FontRendering, subpixelCoverageCompositesPerChannel ) {
"Static text lost independent LCD channel coverage" );
EXPECT_TRUE_MSG( hasColoredCoverage( image.getHeight() / 2, image.getHeight() ),
"Retained text lost independent LCD channel coverage" );
compareImages( utest_state, utest_result, window, "eepp-subpixel-text" );
FrameBufferUniquePtr frameBuffer = FrameBuffer::New( 240, 48, false, false, false, 4, window );
ASSERT_TRUE( frameBuffer && frameBuffer->created() );