Merge branch 'master' of https://github.com/coelckers/gzdoom into lightmaps2

This commit is contained in:
nashmuhandes 2021-09-27 07:32:30 +08:00
commit ff3cdb7e56
5 changed files with 52 additions and 12 deletions

View File

@ -81,12 +81,11 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int
int texformat = GL_RGBA;// TexFormat[gl_texture_format];
bool deletebuffer=false;
/*
if (forcenocompression)
{
texformat = GL_RGBA8;
}
*/
// When running in SW mode buffer will be null, so set it to the texBuffer already created
// There could be other use cases I do not know about which means this is a bad idea..
if (buffer == nullptr)
buffer = texBuffer;
bool firstCall = glTexID == 0;
if (firstCall)
{
@ -136,9 +135,19 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int
sourcetype = GL_BGRA;
texformat = GL_BGRA;
#else
sourcetype = GL_BGRA;
texformat = GL_RGBA;
if (glTextureBytes == 1)
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
sourcetype = GL_RED;
texformat = GL_R8;
}
else
{
sourcetype = GL_BGRA;
texformat = GL_RGBA;
}
#endif
glTexImage2D(GL_TEXTURE_2D, 0, texformat, rw, rh, 0, sourcetype, GL_UNSIGNED_BYTE, buffer);
if (deletebuffer && buffer) free(buffer);
@ -155,6 +164,26 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int
}
void FHardwareTexture::AllocateBuffer(int w, int h, int texelsize)
{
int rw = GetTexDimension(w);
int rh = GetTexDimension(h);
if (texelsize < 1 || texelsize > 4) texelsize = 4;
glTextureBytes = texelsize;
bufferpitch = w;
if (texBuffer)
delete[] texBuffer;
texBuffer = new uint8_t[(w * h) * texelsize];
return;
}
uint8_t* FHardwareTexture::MapBuffer()
{
return texBuffer;
}
//===========================================================================
//
@ -164,6 +193,9 @@ unsigned int FHardwareTexture::CreateTexture(unsigned char * buffer, int w, int
FHardwareTexture::~FHardwareTexture()
{
if (glTexID != 0) glDeleteTextures(1, &glTexID);
if (texBuffer)
delete[] texBuffer;
}

View File

@ -42,6 +42,8 @@ private:
unsigned int glTexID = 0;
unsigned int glDepthID = 0; // only used by camera textures
uint8_t* texBuffer;
int glTextureBytes;
bool mipmapped = false;
@ -52,6 +54,8 @@ public:
{
forcenofilter = disablefilter;
glTextureBytes = numchannels;
texBuffer = nullptr;
}
~FHardwareTexture();
@ -64,8 +68,8 @@ public:
unsigned int Bind(int texunit, bool needmipmap);
bool BindOrCreate(FTexture* tex, int texunit, int clampmode, int translation, int flags);
void AllocateBuffer(int w, int h, int texelsize) {} // Not used
uint8_t* MapBuffer() { return 0; } // Not used
void AllocateBuffer(int w, int h, int texelsize);
uint8_t* MapBuffer();
unsigned int CreateTexture(unsigned char* buffer, int w, int h, int texunit, bool mipmap, const char* name);
unsigned int GetTextureHandle()

View File

@ -32,6 +32,10 @@ static void* LoadGLES2Proc(const char* name)
{
glesLib = dlopen("libGLESv2.so", flags);
}
if(!glesLib)
{
glesLib = dlopen("libGLESv2.so.2", flags);
}
}
void * ret = NULL;

View File

@ -578,7 +578,7 @@ inline BufferBuilder::BufferBuilder()
inline void BufferBuilder::setSize(size_t size)
{
bufferInfo.size = size;
bufferInfo.size = std::max(size, (size_t)16);
}
inline void BufferBuilder::setUsage(VkBufferUsageFlags bufferUsage, VmaMemoryUsage memoryUsage, VmaAllocationCreateFlags allocFlags)

View File

@ -140,7 +140,7 @@ class PlayerPawn : Actor
if (health > 0) Height = FullHeight;
}
if (bWeaponLevel2Ended)
if (player && bWeaponLevel2Ended)
{
bWeaponLevel2Ended = false;
if (player.ReadyWeapon != NULL && player.ReadyWeapon.bPowered_Up)