mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 14:57:20 +00:00
[client] added support for RGBA, BGRA and 10-bit RGBA
This commit is contained in:
parent
1beeac545d
commit
75ffcacfe4
@ -381,7 +381,9 @@ int frameThread(void * unused)
|
||||
size_t dataSize;
|
||||
switch(header.type)
|
||||
{
|
||||
case FRAME_TYPE_ARGB:
|
||||
case FRAME_TYPE_RGBA:
|
||||
case FRAME_TYPE_BGRA:
|
||||
case FRAME_TYPE_RGBA10:
|
||||
dataSize = lgrFormat.height * lgrFormat.pitch;
|
||||
lgrFormat.bpp = 32;
|
||||
break;
|
||||
|
@ -278,12 +278,24 @@ bool egl_on_frame_event(void * opaque, const LG_RendererFormat format, const uin
|
||||
|
||||
switch(format.type)
|
||||
{
|
||||
case FRAME_TYPE_ARGB:
|
||||
case FRAME_TYPE_BGRA:
|
||||
this->pixFmt = EGL_PF_BGRA;
|
||||
this->shader = this->shaders.bgra;
|
||||
this->frameSize = format.height * format.pitch;
|
||||
break;
|
||||
|
||||
case FRAME_TYPE_RGBA:
|
||||
this->pixFmt = EGL_PF_RGBA;
|
||||
this->shader = this->shaders.rgba;
|
||||
this->frameSize = format.height * format.pitch;
|
||||
break;
|
||||
|
||||
case FRAME_TYPE_RGBA10:
|
||||
this->pixFmt = EGL_PF_RGBA10;
|
||||
this->shader = this->shaders.rgba;
|
||||
this->frameSize = format.height * format.pitch;
|
||||
break;
|
||||
|
||||
case FRAME_TYPE_YUV420:
|
||||
this->pixFmt = EGL_PF_YUV420;
|
||||
this->shader = this->shaders.yuv;
|
||||
@ -291,6 +303,7 @@ bool egl_on_frame_event(void * opaque, const LG_RendererFormat format, const uin
|
||||
break;
|
||||
|
||||
default:
|
||||
DEBUG_ERROR("Unsupported frame format");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -112,11 +112,7 @@ uniform sampler2D sampler1;\
|
||||
\
|
||||
void main()\
|
||||
{\
|
||||
highp vec4 tmp = texture(sampler1, uv);\
|
||||
color.r = tmp.b;\
|
||||
color.g = tmp.g;\
|
||||
color.b = tmp.r;\
|
||||
color.a = tmp.a;\
|
||||
color = texture(sampler1, uv);\
|
||||
}\
|
||||
";
|
||||
|
||||
|
@ -38,7 +38,9 @@ struct EGL_Texture
|
||||
GLuint samplers[3];
|
||||
size_t planes[3][2];
|
||||
GLintptr offsets[3];
|
||||
GLenum intFormat;
|
||||
GLenum format;
|
||||
GLenum dataType;
|
||||
|
||||
bool hasPBO;
|
||||
GLuint pbo[2];
|
||||
@ -91,13 +93,34 @@ bool egl_texture_setup(EGL_Texture * texture, enum EGL_PixelFormat pixFmt, size_
|
||||
|
||||
switch(pixFmt)
|
||||
{
|
||||
case EGL_PF_RGBA:
|
||||
case EGL_PF_BGRA:
|
||||
textureCount = 1;
|
||||
texture->format = GL_BGRA;
|
||||
texture->planes[0][0] = width;
|
||||
texture->planes[0][1] = height;
|
||||
texture->offsets[0] = 0;
|
||||
texture->intFormat = GL_BGRA;
|
||||
texture->dataType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
|
||||
case EGL_PF_RGBA:
|
||||
textureCount = 1;
|
||||
texture->format = GL_RGBA;
|
||||
texture->planes[0][0] = width;
|
||||
texture->planes[0][1] = height;
|
||||
texture->offsets[0] = 0;
|
||||
texture->intFormat = GL_BGRA;
|
||||
texture->dataType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
|
||||
case EGL_PF_RGBA10:
|
||||
textureCount = 1;
|
||||
texture->format = GL_RGBA;
|
||||
texture->planes[0][0] = width;
|
||||
texture->planes[0][1] = height;
|
||||
texture->offsets[0] = 0;
|
||||
texture->intFormat = GL_RGB10_A2;
|
||||
texture->dataType = GL_UNSIGNED_INT_2_10_10_10_REV;
|
||||
break;
|
||||
|
||||
case EGL_PF_YUV420:
|
||||
@ -112,6 +135,7 @@ bool egl_texture_setup(EGL_Texture * texture, enum EGL_PixelFormat pixFmt, size_
|
||||
texture->offsets[0] = 0;
|
||||
texture->offsets[1] = width * height;
|
||||
texture->offsets[2] = texture->offsets[1] + (texture->offsets[1] / 4);
|
||||
texture->dataType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -140,8 +164,8 @@ bool egl_texture_setup(EGL_Texture * texture, enum EGL_PixelFormat pixFmt, size_
|
||||
glSamplerParameteri(texture->samplers[i], GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture->textures[i]);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, texture->format, texture->planes[i][0], texture->planes[i][1],
|
||||
0, texture->format, GL_UNSIGNED_BYTE, NULL);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, texture->intFormat, texture->planes[i][0], texture->planes[i][1],
|
||||
0, texture->format, texture->dataType, NULL);
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
@ -194,7 +218,7 @@ bool egl_texture_update(EGL_Texture * texture, const uint8_t * buffer)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, texture->textures[i]);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture->planes[i][0], texture->planes[i][1],
|
||||
texture->format, GL_UNSIGNED_BYTE, buffer + texture->offsets[i]);
|
||||
texture->format, texture->dataType, buffer + texture->offsets[i]);
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
}
|
||||
@ -210,7 +234,7 @@ void egl_texture_bind(EGL_Texture * texture)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, texture->textures[i]);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture->planes[i][0], texture->planes[i][1],
|
||||
texture->format, GL_UNSIGNED_BYTE, (const void *)texture->offsets[i]);
|
||||
texture->format, texture->dataType, (const void *)texture->offsets[i]);
|
||||
}
|
||||
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
@ -31,6 +31,7 @@ enum EGL_PixelFormat
|
||||
{
|
||||
EGL_PF_RGBA,
|
||||
EGL_PF_BGRA,
|
||||
EGL_PF_RGBA10,
|
||||
EGL_PF_YUV420
|
||||
};
|
||||
|
||||
|
@ -878,7 +878,8 @@ static bool configure(struct Inst * this, SDL_Window *window)
|
||||
|
||||
switch(this->format.type)
|
||||
{
|
||||
case FRAME_TYPE_ARGB:
|
||||
case FRAME_TYPE_BGRA:
|
||||
case FRAME_TYPE_RGBA:
|
||||
this->decoder = &LGD_NULL;
|
||||
break;
|
||||
|
||||
|
@ -21,12 +21,14 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include <stdint.h>
|
||||
|
||||
#define KVMFR_HEADER_MAGIC "[[KVMFR]]"
|
||||
#define KVMFR_HEADER_VERSION 7
|
||||
#define KVMFR_HEADER_VERSION 8
|
||||
|
||||
typedef enum FrameType
|
||||
{
|
||||
FRAME_TYPE_INVALID ,
|
||||
FRAME_TYPE_ARGB , // ABGR interleaved: A,R,G,B 32bpp
|
||||
FRAME_TYPE_BGRA , // BGRA interleaved: B,G,R,A 32bpp
|
||||
FRAME_TYPE_RGBA , // RGBA interleaved: R,G,B,A 32bpp
|
||||
FRAME_TYPE_RGBA10 , // RGBA interleaved: R,G,B,A 10,10,10,2 bpp
|
||||
FRAME_TYPE_YUV420 , // YUV420
|
||||
FRAME_TYPE_H264 , // H264 compressed
|
||||
FRAME_TYPE_MAX , // sentinel value
|
||||
|
Loading…
Reference in New Issue
Block a user