mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-02-21 11:01:36 +00:00
- change software renderer upload code to use GL_STREAM_DRAW and a memcpy from system memory
This commit is contained in:
parent
4e2385e912
commit
e93d1e3ebc
3 changed files with 10 additions and 3 deletions
|
@ -296,7 +296,7 @@ void FHardwareTexture::AllocateBuffer(int w, int h, int texelsize)
|
||||||
{
|
{
|
||||||
glGenBuffers(1, &glBufferID);
|
glGenBuffers(1, &glBufferID);
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, glBufferID);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, glBufferID);
|
||||||
glBufferData(GL_PIXEL_UNPACK_BUFFER, w*h*texelsize, nullptr, GL_DYNAMIC_DRAW);
|
glBufferData(GL_PIXEL_UNPACK_BUFFER, w*h*texelsize, nullptr, GL_STREAM_DRAW);
|
||||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,11 +111,17 @@ sector_t *SWSceneDrawer::RenderView(player_t *player)
|
||||||
fbtex->SystemTexture[0]->AllocateBuffer(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor() ? 4 : 1);
|
fbtex->SystemTexture[0]->AllocateBuffer(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor() ? 4 : 1);
|
||||||
auto mat = FMaterial::ValidateTexture(fbtex.get(), false);
|
auto mat = FMaterial::ValidateTexture(fbtex.get(), false);
|
||||||
mat->AddTextureLayer(PaletteTexture.get());
|
mat->AddTextureLayer(PaletteTexture.get());
|
||||||
|
|
||||||
|
FBBuffer.Resize(screen->GetWidth() * screen->GetHeight());
|
||||||
}
|
}
|
||||||
auto buf = fbtex->SystemTexture[0]->MapBuffer();
|
|
||||||
if (!buf) I_FatalError("Unable to map buffer for software rendering");
|
auto buf = (uint8_t*)&FBBuffer[0];
|
||||||
buffer.SetBuffer(screen->GetWidth(), screen->GetHeight(), screen->GetWidth(), buf);
|
buffer.SetBuffer(screen->GetWidth(), screen->GetHeight(), screen->GetWidth(), buf);
|
||||||
SWRenderer->RenderView(player, &buffer);
|
SWRenderer->RenderView(player, &buffer);
|
||||||
|
|
||||||
|
auto pbobuf = fbtex->SystemTexture[0]->MapBuffer();
|
||||||
|
if (!pbobuf) I_FatalError("Unable to map buffer for software rendering");
|
||||||
|
memcpy(pbobuf, buf, FBBuffer.Size() * (V_IsTrueColor() ? 4 : 1));
|
||||||
fbtex->SystemTexture[0]->CreateTexture(nullptr, screen->GetWidth(), screen->GetHeight(), 0, false, 0, "swbuffer");
|
fbtex->SystemTexture[0]->CreateTexture(nullptr, screen->GetWidth(), screen->GetHeight(), 0, false, 0, "swbuffer");
|
||||||
|
|
||||||
auto map = swrenderer::CameraLight::Instance()->ShaderColormap();
|
auto map = swrenderer::CameraLight::Instance()->ShaderColormap();
|
||||||
|
|
|
@ -14,6 +14,7 @@ class SWSceneDrawer
|
||||||
{
|
{
|
||||||
std::unique_ptr<FTexture> PaletteTexture;
|
std::unique_ptr<FTexture> PaletteTexture;
|
||||||
std::unique_ptr<FSWSceneTexture> FBTexture[2];
|
std::unique_ptr<FSWSceneTexture> FBTexture[2];
|
||||||
|
TArray<uint32_t> FBBuffer;
|
||||||
int FBTextureIndex = 0;
|
int FBTextureIndex = 0;
|
||||||
bool FBIsTruecolor = false;
|
bool FBIsTruecolor = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue