emulator opengl - encode glShaderSource
glShaderSource strings are concatenated into a single string before sent over the wire protocol. The wire protocol transfer is done using a special api call 'glShaderString' Change-Id: I90c157df66fe82fee17c460a1e7852d370c77088
This commit is contained in:
committed by
David 'Digit' Turner
parent
d10c96517b
commit
0c814b227c
@@ -363,24 +363,37 @@ int glUtilsPixelBitSize(GLenum format, GLenum type)
|
|||||||
return pixelsize;
|
return pixelsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pack a list of strings into one.
|
||||||
int glUtilsSumArrayValues(GLint *array, GLsizei count)
|
void glUtilsPackStrings(char *ptr, char **strings, GLint *length, GLsizei count)
|
||||||
{
|
{
|
||||||
int sum = 0;
|
char *p = ptr;
|
||||||
|
*p = '\0';
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
sum += *array;
|
int l;
|
||||||
array++;
|
if (length == NULL || length[i] < 0) {
|
||||||
|
l = strlen(strings[i]);
|
||||||
|
strcat(p, strings[i]);
|
||||||
|
} else {
|
||||||
|
l = length[i];
|
||||||
|
strncat(p, strings[i], l);
|
||||||
}
|
}
|
||||||
return sum;
|
p += l;
|
||||||
}
|
|
||||||
|
|
||||||
void glUtilsPackStrings(void *ptr, char **strings, GLint *length, GLsizei count)
|
|
||||||
{
|
|
||||||
unsigned char *p = (unsigned char *)ptr;
|
|
||||||
for (int i = 0; i < count; i++) {
|
|
||||||
memcpy(p, *strings, *length);
|
|
||||||
p += *length;
|
|
||||||
strings++;
|
|
||||||
length++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// claculate the length of a list of strings
|
||||||
|
int glUtilsCalcShaderSourceLen( char **strings, GLint *length, GLsizei count)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
int l;
|
||||||
|
if (length == NULL || length[i] < 0) {
|
||||||
|
l = strlen(strings[i]);
|
||||||
|
} else {
|
||||||
|
l = length[i];
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ extern "C" {
|
|||||||
int size, GLenum type, unsigned int stride,
|
int size, GLenum type, unsigned int stride,
|
||||||
unsigned int datalen);
|
unsigned int datalen);
|
||||||
int glUtilsPixelBitSize(GLenum format, GLenum type);
|
int glUtilsPixelBitSize(GLenum format, GLenum type);
|
||||||
int glUtilsSumArrayValues(GLint *array, GLsizei count);
|
void glUtilsPackStrings(char *ptr, char **strings, GLint *length, GLsizei count);
|
||||||
void glUtilsPackStrings(void *ptr, char **strings, GLint *length, GLsizei count);
|
int glUtilsCalcShaderSourceLen(char **strings, GLint *length, GLsizei count);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ GL2Encoder::GL2Encoder(IOStream *stream) : gl2_encoder_context_t(stream)
|
|||||||
m_glGetVertexAttribiv_enc = set_glGetVertexAttribiv(s_glGetVertexAttribiv);
|
m_glGetVertexAttribiv_enc = set_glGetVertexAttribiv(s_glGetVertexAttribiv);
|
||||||
m_glGetVertexAttribfv_enc = set_glGetVertexAttribfv(s_glGetVertexAttribfv);
|
m_glGetVertexAttribfv_enc = set_glGetVertexAttribfv(s_glGetVertexAttribfv);
|
||||||
m_glGetVertexAttribPointerv = set_glGetVertexAttribPointerv(s_glGetVertexAttribPointerv);
|
m_glGetVertexAttribPointerv = set_glGetVertexAttribPointerv(s_glGetVertexAttribPointerv);
|
||||||
|
set_glShaderSource(s_glShaderSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
GL2Encoder::~GL2Encoder()
|
GL2Encoder::~GL2Encoder()
|
||||||
@@ -322,3 +323,15 @@ GLint * GL2Encoder::getCompressedTextureFormats()
|
|||||||
}
|
}
|
||||||
return m_compressedTextureFormats;
|
return m_compressedTextureFormats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GL2Encoder::s_glShaderSource(void *self, GLuint shader, GLsizei count, GLstr *string, GLint *length)
|
||||||
|
{
|
||||||
|
|
||||||
|
int len = glUtilsCalcShaderSourceLen(string, length, count);
|
||||||
|
char *str = new char[len + 1];
|
||||||
|
glUtilsPackStrings(str, string, length, count);
|
||||||
|
|
||||||
|
GL2Encoder *ctx = (GL2Encoder *)self;
|
||||||
|
ctx->glShaderString(ctx, shader, str, len + 1);
|
||||||
|
delete str;
|
||||||
|
}
|
||||||
|
|||||||
@@ -91,5 +91,6 @@ private:
|
|||||||
glGetVertexAttribPointerv_client_proc_t m_glGetVertexAttribPointerv;
|
glGetVertexAttribPointerv_client_proc_t m_glGetVertexAttribPointerv;
|
||||||
static void s_glGetVertexAttribPointerv(void *self, GLuint index, GLenum pname, GLvoid **pointer);
|
static void s_glGetVertexAttribPointerv(void *self, GLuint index, GLenum pname, GLvoid **pointer);
|
||||||
|
|
||||||
|
static void s_glShaderSource(void *self, GLuint shader, GLsizei count, GLstr *string, GLint *length);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -344,11 +344,12 @@ glMultiDrawArraysEXT
|
|||||||
glMultiDrawElementsEXT
|
glMultiDrawElementsEXT
|
||||||
flag unsupported
|
flag unsupported
|
||||||
|
|
||||||
|
|
||||||
|
# handled by encoder
|
||||||
#void glShaderSource(GLuint shader, GLsizei count, GLstr *string, const GLint *length)
|
#void glShaderSource(GLuint shader, GLsizei count, GLstr *string, const GLint *length)
|
||||||
glShaderSource
|
glShaderSource
|
||||||
len length (count * sizeof(GLint))
|
flag unsupported
|
||||||
len string (glUtilsSumArrayValues(length, count))
|
|
||||||
custom_pack string glUtilsPackStrings(ptr, string, length, count)
|
|
||||||
|
|
||||||
|
|
||||||
#void glGetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups)
|
#void glGetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups)
|
||||||
|
|||||||
Reference in New Issue
Block a user