diff --git a/source/common/rendering/gles/gles_hwtexture.cpp b/source/common/rendering/gles/gles_hwtexture.cpp index 5ce937b10..b864b61c8 100644 --- a/source/common/rendering/gles/gles_hwtexture.cpp +++ b/source/common/rendering/gles/gles_hwtexture.cpp @@ -138,7 +138,23 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int #else sourcetype = GL_BGRA; texformat = GL_RGBA; + + if (glTextureBytes > 0) + { + if (glTextureBytes < 4) glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + static const int ITypes[] = { GL_R8, GL_RG8, GL_RGB8, GL_RGBA8 }; + static const int STypes[] = { GL_RED, GL_RG, GL_BGR, GL_BGRA }; + + texformat = ITypes[glTextureBytes - 1]; + sourcetype = STypes[glTextureBytes - 1]; + } + else + { + sourcetype = GL_BGRA; + } + #endif + glTexImage2D(GL_TEXTURE_2D, 0, texformat, rw, rh, 0, sourcetype, GL_UNSIGNED_BYTE, buffer); if (deletebuffer && buffer) free(buffer); diff --git a/source/common/rendering/gles/gles_renderstate.cpp b/source/common/rendering/gles/gles_renderstate.cpp index 9a5374b18..de355bb4f 100644 --- a/source/common/rendering/gles/gles_renderstate.cpp +++ b/source/common/rendering/gles/gles_renderstate.cpp @@ -35,6 +35,9 @@ #include "gles_renderbuffers.h" #include "gles_hwtexture.h" #include "gles_buffers.h" +#include "gles_framebuffer.h" +#include "gles_renderer.h" +#include "gles_samplers.h" #include "hw_clock.h" #include "printf.h" @@ -454,6 +457,7 @@ void FGLRenderState::ApplyMaterial(FMaterial *mat, int clampmode, int translatio MaterialLayerInfo* layer; auto base = static_cast(mat->GetLayer(0, translation, &layer)); + if (base->BindOrCreate(tex->GetTexture(), 0, clampmode, translation, layer->scaleFlags)) { if (!(layer->scaleFlags & CTF_Indexed)) @@ -472,6 +476,9 @@ void FGLRenderState::ApplyMaterial(FMaterial *mat, int clampmode, int translatio { auto systex = static_cast(mat->GetLayer(i, translation, &layer)); systex->Bind(i, false); + //if (clampmode <= CLAMP_XY) clampmode += CLAMP_NOFILTER - CLAMP_NONE; + clampmode += CLAMP_NOFILTER - CLAMP_NONE; + GLRenderer->mSamplerManager->Bind(i, clampmode, 255); maxbound = i; } }