Skip to content

Commit 3c227c1

Browse files
committed
skip 8bit intermediary buffer and go straight to 32bit colorbuffer
1 parent a492aa0 commit 3c227c1

File tree

4 files changed

+25
-17
lines changed

4 files changed

+25
-17
lines changed

Data/Base.rte/Shaders/Background.frag

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ in vec4 vertexColor;
66
out vec4 FragColor;
77

88
uniform sampler2D rteTexture;
9+
uniform sampler2D rtePalette;
910
uniform vec4 rteColor;
1011
uniform bool drawMasked;
1112

@@ -24,5 +25,5 @@ void main() {
2425
if (red==0 && drawMasked) {
2526
discard;
2627
}
27-
FragColor = vec4(red, 0.0, 0.0, 0) * vertexColor.r;
28+
FragColor = texture2DAA(rtePalette, vec2(red * rteColor.r * vertexColor.r, 0.0)) * vec4(vec3(1.0), rteColor.a * vertexColor.a);
2829
}

Source/Managers/FrameMan.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ int FrameMan::CreateBackBuffers() {
142142
m_BackBuffer32 = std::unique_ptr<BITMAP, BitmapDeleter>(create_bitmap_ex(c_BPP, resX, resY));
143143
ClearBackBuffer32();
144144

145-
m_BackBuffer = std::make_unique<RenderTarget>(FloatRect(0, 0, resX, resY), FloatRect(0, 0, resX, resY), 8);
145+
m_BackBuffer = std::make_unique<RenderTarget>(FloatRect(0, 0, resX, resY), FloatRect(0, 0, resX, resY));
146146

147147
m_OverlayBitmap32 = std::unique_ptr<BITMAP, BitmapDeleter>(create_bitmap_ex(c_BPP, resX, resY));
148148
clear_to_color(m_OverlayBitmap32.get(), 0);
@@ -472,6 +472,7 @@ void FrameMan::SetTransTableFromPreset(TransparencyPreset transPreset) {
472472
color_map = &m_ColorTables[DrawBlendMode::BlendTransparency].at(colorChannelBlendAmounts).first;
473473
m_ColorTables[DrawBlendMode::BlendTransparency].at(colorChannelBlendAmounts).second = -1;
474474
}
475+
m_CurrentAlpha = 255 - transPreset;
475476
}
476477

477478
void FrameMan::CreateNewNetworkPlayerBackBuffer(int player, int width, int height) {
@@ -809,9 +810,14 @@ void FrameMan::Draw() {
809810
g_PresetMan.GetEntityPreset("Shader", "Background")->Clone(&backgroundShader);
810811
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
811812
clear_to_color(m_BackBuffer8.get(), 0);
812-
rlDisableColorBlend();
813-
rlDisableDepthTest();
813+
rlEnableColorBlend();
814+
rlSetBlendMode(RL_BLEND_ALPHA);
815+
rlEnableDepthTest();
814816
m_BackBuffer->Begin(true);
817+
backgroundShader.Begin();
818+
backgroundShader.Enable();
819+
rlSetUniformSampler(backgroundShader.GetUniformLocation("rtePalette"), g_PostProcessMan.GetPaletteTexture());
820+
backgroundShader.SetInt("drawMasked", 1);
815821

816822
// Count how many split screens we'll need
817823
int screenCount = (m_HSplit ? 2 : 1) * (m_VSplit ? 2 : 1);
@@ -830,9 +836,6 @@ void FrameMan::Draw() {
830836
screenRelativeGlowBoxes.clear();
831837

832838
m_PlayerScreen->Begin(true);
833-
backgroundShader.Begin();
834-
backgroundShader.Enable();
835-
backgroundShader.SetInt("drawMasked", 1);
836839

837840
//rlSetUniformSampler(backgroundShader.GetUniformLocation("rtePalette"), g_PostProcessMan.GetPaletteTexture());
838841
BITMAP* drawScreen = (screenCount == 1) ? m_BackBuffer8.get() : m_PlayerScreen8.get();
@@ -954,8 +957,10 @@ void FrameMan::Draw() {
954957
if (IsInMultiplayerMode()) {
955958
PrepareFrameForNetwork();
956959
}
960+
rlDisableDepthTest();
957961
g_GLResourceMan.UpdateDynamicBitmap(m_BackBuffer8.get(), true);
958962
DrawTexture(g_GLResourceMan.GetStaticTextureFromBitmap(m_BackBuffer8.get()), 0.0f, 0.0f, {255, 255, 255, 255});
963+
backgroundShader.End();
959964
m_BackBuffer->End();
960965
if (g_ActivityMan.IsInActivity()) {
961966
g_PostProcessMan.PostProcess();

Source/Managers/FrameMan.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ namespace RTE {
199199
/// @param transValue The transparency preset value. See the TransparencyPreset enumeration for values.
200200
void SetTransTableFromPreset(TransparencyPreset transValue);
201201

202+
/// @brief Get the current alpha level for transparent draws.
203+
/// @return Integer between 0-255 of alpha value.
204+
unsigned char GetCurrentAlpha() {return m_CurrentAlpha;}
205+
202206
/// Flashes any of the players' screen with the specified color for this frame.
203207
/// @param screen Which screen to flash.
204208
/// @param color What color to flash it. -1 means no color or flash.
@@ -396,6 +400,7 @@ namespace RTE {
396400
/// The key is an array of the RGBA values. The value is a pair of the color table itself and a time stamp of when it was last accessed for use during color table pruning.
397401
std::array<std::unordered_map<std::array<int, 4>, std::pair<COLOR_MAP, long long>>, DrawBlendMode::BlendModeCount> m_ColorTables;
398402
Timer m_ColorTablePruneTimer; //!< Timer for pruning unused color tables to prevent ridiculous memory usage.
403+
int m_CurrentAlpha;
399404

400405
std::shared_ptr<BITMAP> m_PlayerScreen8; //!< Intermediary split screen bitmap.
401406
std::shared_ptr<RenderTarget> m_PlayerScreen; //!< Intermediary split screen bitmap.

Source/Managers/PostProcessMan.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -349,17 +349,14 @@ void PostProcessMan::PostProcess() {
349349
UpdatePalette();
350350

351351
// First copy the current 8bpp backbuffer to the 32bpp buffer; we'll add effects to it
352-
GL_CHECK(glDisable(GL_BLEND));
353-
GL_CHECK(glActiveTexture(GL_TEXTURE0));
354-
GL_CHECK(glBindTexture(GL_TEXTURE_2D, g_FrameMan.GetBackBuffer()->GetColorTexture().id));
355-
GL_CHECK(glActiveTexture(GL_TEXTURE1));
356-
GL_CHECK(glBindTexture(GL_TEXTURE_2D, m_Palette8Texture));
357352
m_PostProcessFramebuffer->Begin(false);
358-
m_Blit8->Begin();
359-
int paletteUniform = m_Blit8->GetUniformLocation("rtePalette");
360-
rlSetUniformSampler(paletteUniform, m_Palette8Texture);
361-
DrawTexture(g_FrameMan.GetBackBuffer()->GetColorTexture(), 0, 0, {255, 255, 255, 255});
362-
m_Blit8->End();
353+
//m_Blit8->Begin();
354+
//int paletteUniform = m_Blit8->GetUniformLocation("rtePalette");
355+
//rlSetUniformSampler(paletteUniform, m_Palette8Texture);
356+
rlDisableColorBlend();
357+
rlDisableDepthTest();
358+
DrawTextureRec(g_FrameMan.GetBackBuffer()->GetColorTexture(), {0, 0, g_FrameMan.GetBackBuffer()->GetSize().w, -g_FrameMan.GetBackBuffer()->GetSize().h}, {0.0f, 0.0f}, {255, 255, 255, 255});
359+
//m_Blit8->End();
363360

364361
// Set the screen blender mode for glows
365362
set_screen_blender(128, 128, 128, 128);

0 commit comments

Comments
 (0)