mirror of
https://github.com/MobileGL-Dev/MobileGlues.git
synced 2025-09-22 10:42:11 -04:00
[Release|...] (...): Version dump to 1.0.3.
Use simulated glBindFragDataLocation and fix its bug. Format the renderer name of ANGLE. Signed-off-by: BZLZHH <admin@bzlzhh.top>
This commit is contained in:
parent
e67430b7f3
commit
fa483e886e
@ -5,6 +5,7 @@
|
|||||||
#include "getter.h"
|
#include "getter.h"
|
||||||
#include "../config/settings.h"
|
#include "../config/settings.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#define DEBUG 0
|
#define DEBUG 0
|
||||||
|
|
||||||
@ -112,11 +113,35 @@ const char* getBeforeThirdSpace(const char* str) {
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* getGpuName() {
|
const char* getGpuName() {
|
||||||
LOAD_GLES_FUNC(glGetString);
|
LOAD_GLES_FUNC(glGetString);
|
||||||
const char *gpuName = (const char *) gles_glGetString(GL_RENDERER);
|
const char *gpuName = (const char *) gles_glGetString(GL_RENDERER);
|
||||||
return gpuName ? gpuName : "<unknown>";
|
|
||||||
|
if (!gpuName) {
|
||||||
|
return "<unknown>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp(gpuName, "ANGLE", 5) == 0) {
|
||||||
|
std::string gpuStr(gpuName);
|
||||||
|
|
||||||
|
size_t firstParen = gpuStr.find('(');
|
||||||
|
size_t secondParen = gpuStr.find('(', firstParen + 1);
|
||||||
|
size_t lastParen = gpuStr.rfind('(');
|
||||||
|
|
||||||
|
std::string gpu = gpuStr.substr(secondParen + 1, lastParen - secondParen - 2);
|
||||||
|
|
||||||
|
size_t vulkanStart = gpuStr.find("Vulkan ");
|
||||||
|
size_t vulkanEnd = gpuStr.find(' ', vulkanStart + 7);
|
||||||
|
std::string vulkanVersion = gpuStr.substr(vulkanStart + 7, vulkanEnd - (vulkanStart + 7));
|
||||||
|
|
||||||
|
std::string formattedGpuName = gpu + " | ANGLE | Vulkan " + vulkanVersion;
|
||||||
|
|
||||||
|
char* result = new char[formattedGpuName.size() + 1];
|
||||||
|
std::strcpy(result, formattedGpuName.c_str());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gpuName;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_es_version() {
|
void set_es_version() {
|
||||||
|
@ -13,85 +13,109 @@
|
|||||||
void glBindFragDataLocation(GLuint program, GLuint color, const GLchar *name) {
|
void glBindFragDataLocation(GLuint program, GLuint color, const GLchar *name) {
|
||||||
LOG()
|
LOG()
|
||||||
LOG_D("glBindFragDataLocation(%d, %d, %s)", program, color, name)
|
LOG_D("glBindFragDataLocation(%d, %d, %s)", program, color, name)
|
||||||
if (g_gles_caps.GL_EXT_blend_func_extended) {
|
// if (g_gles_caps.GL_EXT_blend_func_extended) {
|
||||||
LOAD_GLES_FUNC(glBindFragDataLocationEXT)
|
// LOAD_GLES_FUNC(glBindFragDataLocationEXT)
|
||||||
gles_glBindFragDataLocationEXT(program, color, name);
|
// gles_glBindFragDataLocationEXT(program, color, name);
|
||||||
|
// } else {
|
||||||
|
// LOG_W("Warning: No GL_EXT_blend_func_extended, skipping glBindFragDataLocation...");
|
||||||
|
// }
|
||||||
|
char* origin_glsl = NULL;
|
||||||
|
|
||||||
|
if (shaderInfo.frag_data_changed) {
|
||||||
|
size_t glslLen = strlen(shaderInfo.frag_data_changed_converted) + 1;
|
||||||
|
origin_glsl = (char *)malloc(glslLen);
|
||||||
|
if (origin_glsl == NULL) {
|
||||||
|
LOG_E("Memory reallocation failed for frag_data_changed_converted\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strcpy(origin_glsl, shaderInfo.frag_data_changed_converted);
|
||||||
} else {
|
} else {
|
||||||
LOG_W("Warning: No GL_EXT_blend_func_extended, skipping glBindFragDataLocation...");
|
size_t glslLen = strlen(shaderInfo.converted) + 1;
|
||||||
|
origin_glsl = (char *)malloc(glslLen);
|
||||||
|
if (origin_glsl == NULL) {
|
||||||
|
LOG_E("Memory reallocation failed for converted\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strcpy(origin_glsl, shaderInfo.converted);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (shaderInfo.converted) {
|
int len = strlen(name);
|
||||||
// int len = strlen(name);
|
int tlen = len + 32;
|
||||||
// int tlen = len + 32;
|
char *targetPattern = malloc(sizeof(char) * tlen);
|
||||||
// char *targetPattern = malloc(sizeof(char) * tlen);
|
if (!targetPattern) {
|
||||||
// if (!targetPattern) {
|
LOG_E("Memory allocation failed for targetPattern")
|
||||||
// LOG_E("Memory allocation failed for targetPattern")
|
return;
|
||||||
// return;
|
}
|
||||||
// }
|
sprintf(targetPattern, "out[ ]+[A-Za-z0-9 ]+[ ]+%s", name);
|
||||||
// sprintf(targetPattern, "out[ ]+[A-Za-z0-9 ]+[ ]+%s", name);
|
regex_t regex;
|
||||||
// regex_t regex;
|
regmatch_t pmatch[1];
|
||||||
// regmatch_t pmatch[1];
|
char *origin = NULL;
|
||||||
// char *origin = NULL;
|
char *result = NULL;
|
||||||
// char *result = NULL;
|
if (regcomp(®ex, targetPattern, REG_EXTENDED) != 0) {
|
||||||
//
|
LOG_E("Failed to compile regex\n");
|
||||||
// if (regcomp(®ex, targetPattern, REG_EXTENDED) != 0) {
|
return;
|
||||||
// LOG_E("Failed to compile regex\n");
|
}
|
||||||
// return;
|
char *searchStart = origin_glsl;
|
||||||
// }
|
while (regexec(®ex, searchStart, 1, pmatch, 0) == 0) {
|
||||||
//
|
size_t matchLen = pmatch[0].rm_eo - pmatch[0].rm_so;
|
||||||
// char *searchStart = shaderInfo.converted;
|
origin = (char *) malloc(matchLen + 1);
|
||||||
// while (regexec(®ex, searchStart, 1, pmatch, 0) == 0) {
|
if (!origin) {
|
||||||
// size_t matchLen = pmatch[0].rm_eo - pmatch[0].rm_so;
|
LOG_E("Memory allocation failed\n");
|
||||||
// origin = (char *)malloc(matchLen + 1);
|
break;
|
||||||
// if (!origin) {
|
}
|
||||||
// LOG_E("Memory allocation failed\n");
|
strncpy(origin, searchStart + pmatch[0].rm_so, matchLen);
|
||||||
// break;
|
origin[matchLen] = '\0';
|
||||||
// }
|
|
||||||
// strncpy(origin, searchStart + pmatch[0].rm_so, matchLen);
|
size_t resultLen =
|
||||||
// origin[matchLen] = '\0';
|
strlen(origin) + 30; // "layout (location = )" + colorNumber + null terminator
|
||||||
//
|
result = (char *) malloc(resultLen);
|
||||||
// size_t resultLen = strlen(origin) + 30; // "layout (location = )" + colorNumber + null terminator
|
if (!result) {
|
||||||
// result = (char *)malloc(resultLen);
|
LOG_E("Memory allocation failed\n");
|
||||||
// if (!result) {
|
free(origin);
|
||||||
// LOG_E("Memory allocation failed\n");
|
break;
|
||||||
// free(origin);
|
}
|
||||||
// break;
|
snprintf(result, resultLen, "layout (location = %d) %s", color, origin);
|
||||||
// }
|
|
||||||
// snprintf(result, resultLen, "layout (location = %d) %s", color, origin);
|
char *temp = strstr(searchStart, origin);
|
||||||
//
|
if (temp) {
|
||||||
// char *temp = strstr(searchStart, origin);
|
size_t prefixLen = temp - origin_glsl;
|
||||||
// if (temp) {
|
size_t suffixLen = strlen(temp + matchLen);
|
||||||
// size_t prefixLen = temp - shaderInfo.converted;
|
size_t newLen = prefixLen + strlen(result) + suffixLen + 1;
|
||||||
// size_t suffixLen = strlen(temp + matchLen);
|
|
||||||
// size_t newLen = prefixLen + strlen(result) + suffixLen + 1;
|
char *newConverted = (char *) malloc(newLen);
|
||||||
//
|
if (!newConverted) {
|
||||||
// char *newConverted = (char *)malloc(newLen);
|
LOG_E("Memory allocation failed\n");
|
||||||
// if (!newConverted) {
|
free(origin);
|
||||||
// LOG_E("Memory allocation failed\n");
|
free(result);
|
||||||
// free(origin);
|
break;
|
||||||
// free(result);
|
}
|
||||||
// break;
|
|
||||||
// }
|
strncpy(newConverted, origin_glsl, prefixLen);
|
||||||
//
|
newConverted[prefixLen] = '\0';
|
||||||
// strncpy(newConverted, shaderInfo.converted, prefixLen);
|
strcat(newConverted, result);
|
||||||
// newConverted[prefixLen] = '\0';
|
strcat(newConverted, temp + matchLen);
|
||||||
// strcat(newConverted, result);
|
|
||||||
// strcat(newConverted, temp + matchLen);
|
size_t newLen_2 = strlen(newConverted) + 1;
|
||||||
//
|
shaderInfo.frag_data_changed_converted = (char *) realloc(
|
||||||
// strcpy(shaderInfo.converted, newConverted);
|
shaderInfo.frag_data_changed_converted, newLen_2);
|
||||||
// free(newConverted);
|
if (shaderInfo.frag_data_changed_converted == NULL) {
|
||||||
// }
|
LOG_E("Memory reallocation failed for frag_data_changed_converted\n");
|
||||||
//
|
return;
|
||||||
// free(origin);
|
}
|
||||||
// free(result);
|
strcpy(shaderInfo.frag_data_changed_converted, newConverted);
|
||||||
//
|
|
||||||
// searchStart += pmatch[0].rm_eo;
|
free(newConverted);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// regfree(®ex);
|
free(origin);
|
||||||
// //LOG_D("Patched shader:\n%s", shaderInfo.converted)
|
free(result);
|
||||||
// shaderInfo.frag_data_changed = 1;
|
|
||||||
//}
|
searchStart += pmatch[0].rm_eo;
|
||||||
|
}
|
||||||
|
free(targetPattern);
|
||||||
|
regfree(®ex);//LOG_D("Patched shader:\n%s", origin_glsl)
|
||||||
|
free(origin_glsl);
|
||||||
|
shaderInfo.frag_data_changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void glLinkProgram(GLuint program) {
|
void glLinkProgram(GLuint program) {
|
||||||
@ -103,7 +127,7 @@ void glLinkProgram(GLuint program) {
|
|||||||
LOAD_GLES(glCompileShader, void, GLuint shader)
|
LOAD_GLES(glCompileShader, void, GLuint shader)
|
||||||
LOAD_GLES(glDetachShader, void, GLuint program, GLuint shader)
|
LOAD_GLES(glDetachShader, void, GLuint program, GLuint shader)
|
||||||
LOAD_GLES(glAttachShader, void, GLuint program, GLuint shader)
|
LOAD_GLES(glAttachShader, void, GLuint program, GLuint shader)
|
||||||
gles_glShaderSource(shaderInfo.id, 1, (const GLchar * const*) &shaderInfo.converted, NULL);
|
gles_glShaderSource(shaderInfo.id, 1, (const GLchar * const*) &shaderInfo.frag_data_changed_converted, NULL);
|
||||||
gles_glCompileShader(shaderInfo.id);
|
gles_glCompileShader(shaderInfo.id);
|
||||||
LOAD_GLES(glGetShaderiv, void, GLuint shader, GLenum pname, GLint *params)
|
LOAD_GLES(glGetShaderiv, void, GLuint shader, GLenum pname, GLint *params)
|
||||||
GLint status = 0;
|
GLint status = 0;
|
||||||
@ -112,7 +136,7 @@ void glLinkProgram(GLuint program) {
|
|||||||
char tmp[500];
|
char tmp[500];
|
||||||
LOAD_GLES(glGetShaderInfoLog, void, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
LOAD_GLES(glGetShaderInfoLog, void, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||||
gles_glGetShaderInfoLog(shaderInfo.id, 500, NULL, tmp);
|
gles_glGetShaderInfoLog(shaderInfo.id, 500, NULL, tmp);
|
||||||
LOG_W("Failed to compile patched shader, log:\n%s", tmp)
|
LOG_E("Failed to compile patched shader, log:\n%s", tmp)
|
||||||
}
|
}
|
||||||
gles_glDetachShader(program, shaderInfo.id);
|
gles_glDetachShader(program, shaderInfo.id);
|
||||||
gles_glAttachShader(program, shaderInfo.id);
|
gles_glAttachShader(program, shaderInfo.id);
|
||||||
@ -120,6 +144,7 @@ void glLinkProgram(GLuint program) {
|
|||||||
}
|
}
|
||||||
shaderInfo.id = 0;
|
shaderInfo.id = 0;
|
||||||
shaderInfo.converted = NULL;
|
shaderInfo.converted = NULL;
|
||||||
|
shaderInfo.frag_data_changed_converted = NULL;
|
||||||
shaderInfo.frag_data_changed = 0;
|
shaderInfo.frag_data_changed = 0;
|
||||||
LOAD_GLES(glLinkProgram, void, GLuint program)
|
LOAD_GLES(glLinkProgram, void, GLuint program)
|
||||||
gles_glLinkProgram(program);
|
gles_glLinkProgram(program);
|
||||||
@ -132,9 +157,9 @@ void glGetProgramiv(GLuint program, GLenum pname, GLint *params) {
|
|||||||
LOAD_GLES_FUNC(glGetProgramiv)
|
LOAD_GLES_FUNC(glGetProgramiv)
|
||||||
gles_glGetProgramiv(program, pname, params);
|
gles_glGetProgramiv(program, pname, params);
|
||||||
if(global_settings.ignore_error >= 1 && (pname == GL_LINK_STATUS || pname == GL_VALIDATE_STATUS) && !*params) {
|
if(global_settings.ignore_error >= 1 && (pname == GL_LINK_STATUS || pname == GL_VALIDATE_STATUS) && !*params) {
|
||||||
GLchar infoLog[512];
|
GLchar* infoLog;
|
||||||
LOAD_GLES_FUNC(glGetShaderInfoLog)
|
LOAD_GLES_FUNC(glGetShaderInfoLog)
|
||||||
gles_glGetShaderInfoLog(program, 512, NULL, infoLog);
|
gles_glGetShaderInfoLog(program, (GLsizei) NULL, NULL, infoLog);
|
||||||
LOG_W_FORCE("Program %d linking failed: \n%s", program, infoLog);
|
LOG_W_FORCE("Program %d linking failed: \n%s", program, infoLog);
|
||||||
LOG_W_FORCE("Now try to cheat.");
|
LOG_W_FORCE("Now try to cheat.");
|
||||||
*params = GL_TRUE;
|
*params = GL_TRUE;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
struct shader_t {
|
struct shader_t {
|
||||||
GLuint id;
|
GLuint id;
|
||||||
char * converted;
|
char * converted;
|
||||||
|
char * frag_data_changed_converted;
|
||||||
int frag_data_changed;
|
int frag_data_changed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#define MAJOR 1
|
#define MAJOR 1
|
||||||
#define MINOR 0
|
#define MINOR 0
|
||||||
#define REVISION 2
|
#define REVISION 3
|
||||||
|
|
||||||
const int version_type = VERSION_RELEASE;
|
const int version_type = VERSION_RELEASE;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user