gl_engine: replace std::string with C-style strings for portability

- C-style strings provide consistent binary interface for FFI
- Reduces potential issues where standard library is limited (e.g., WebAssembly, embedded systems)
This commit is contained in:
Jinny You 2025-05-02 15:23:04 +09:00 committed by Hermet Park
parent 7d4a5215dd
commit 7bcee79077
3 changed files with 41 additions and 28 deletions

View file

@ -98,9 +98,36 @@ void GlRenderer::initShaders()
{ {
mPrograms.reserve((int)RT_None); mPrograms.reserve((int)RT_None);
#define COMMON_TOTAL_LENGTH strlen(STR_GRADIENT_FRAG_COMMON_VARIABLES) + \
strlen(STR_GRADIENT_FRAG_COMMON_FUNCTIONS)
#define LINEAR_TOTAL_LENGTH strlen(STR_LINEAR_GRADIENT_VARIABLES) + \
strlen(STR_LINEAR_GRADIENT_MAIN) + \
COMMON_TOTAL_LENGTH + 1
#define RADIAL_TOTAL_LENGTH strlen(STR_RADIAL_GRADIENT_VARIABLES) + \
strlen(STR_RADIAL_GRADIENT_MAIN) + \
COMMON_TOTAL_LENGTH + 1
char linearGradientFragShader[LINEAR_TOTAL_LENGTH];
snprintf(linearGradientFragShader, LINEAR_TOTAL_LENGTH, "%s%s%s%s",
STR_GRADIENT_FRAG_COMMON_VARIABLES,
STR_LINEAR_GRADIENT_VARIABLES,
STR_GRADIENT_FRAG_COMMON_FUNCTIONS,
STR_LINEAR_GRADIENT_MAIN
);
char radialGradientFragShader[RADIAL_TOTAL_LENGTH];
snprintf(radialGradientFragShader, RADIAL_TOTAL_LENGTH, "%s%s%s%s",
STR_GRADIENT_FRAG_COMMON_VARIABLES,
STR_RADIAL_GRADIENT_VARIABLES,
STR_GRADIENT_FRAG_COMMON_FUNCTIONS,
STR_RADIAL_GRADIENT_MAIN
);
mPrograms.push(new GlProgram(COLOR_VERT_SHADER, COLOR_FRAG_SHADER)); mPrograms.push(new GlProgram(COLOR_VERT_SHADER, COLOR_FRAG_SHADER));
mPrograms.push(new GlProgram(GRADIENT_VERT_SHADER, LINEAR_GRADIENT_FRAG_SHADER)); mPrograms.push(new GlProgram(GRADIENT_VERT_SHADER, linearGradientFragShader));
mPrograms.push(new GlProgram(GRADIENT_VERT_SHADER, RADIAL_GRADIENT_FRAG_SHADER)); mPrograms.push(new GlProgram(GRADIENT_VERT_SHADER, radialGradientFragShader));
mPrograms.push(new GlProgram(IMAGE_VERT_SHADER, IMAGE_FRAG_SHADER)); mPrograms.push(new GlProgram(IMAGE_VERT_SHADER, IMAGE_FRAG_SHADER));
// compose Renderer // compose Renderer

View file

@ -20,7 +20,6 @@
* SOFTWARE. * SOFTWARE.
*/ */
#include <string>
#include "tvgGlShaderSrc.h" #include "tvgGlShaderSrc.h"
#define TVG_COMPOSE_SHADER(shader) #shader #define TVG_COMPOSE_SHADER(shader) #shader
@ -75,12 +74,12 @@ const char* GRADIENT_VERT_SHADER = TVG_COMPOSE_SHADER(
); );
std::string STR_GRADIENT_FRAG_COMMON_VARIABLES = TVG_COMPOSE_SHADER( const char* STR_GRADIENT_FRAG_COMMON_VARIABLES = TVG_COMPOSE_SHADER(
const int MAX_STOP_COUNT = 16; \n const int MAX_STOP_COUNT = 16; \n
in vec2 vPos; \n in vec2 vPos; \n
); );
std::string STR_GRADIENT_FRAG_COMMON_FUNCTIONS = TVG_COMPOSE_SHADER( const char* STR_GRADIENT_FRAG_COMMON_FUNCTIONS = TVG_COMPOSE_SHADER(
float gradientStep(float edge0, float edge1, float x) \n float gradientStep(float edge0, float edge1, float x) \n
{ \n { \n
// linear \n // linear \n
@ -170,7 +169,7 @@ std::string STR_GRADIENT_FRAG_COMMON_FUNCTIONS = TVG_COMPOSE_SHADER(
} \n } \n
); );
std::string STR_LINEAR_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER( const char* STR_LINEAR_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER(
layout(std140) uniform GradientInfo { \n layout(std140) uniform GradientInfo { \n
vec4 nStops; \n vec4 nStops; \n
vec2 gradStartPos; \n vec2 gradStartPos; \n
@ -180,7 +179,7 @@ std::string STR_LINEAR_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER(
} uGradientInfo; \n } uGradientInfo; \n
); );
std::string STR_LINEAR_GRADIENT_MAIN = TVG_COMPOSE_SHADER( const char* STR_LINEAR_GRADIENT_MAIN = TVG_COMPOSE_SHADER(
out vec4 FragColor; \n out vec4 FragColor; \n
void main() \n void main() \n
{ \n { \n
@ -195,7 +194,7 @@ std::string STR_LINEAR_GRADIENT_MAIN = TVG_COMPOSE_SHADER(
} \n } \n
); );
std::string STR_RADIAL_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER( const char* STR_RADIAL_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER(
layout(std140) uniform GradientInfo { \n layout(std140) uniform GradientInfo { \n
vec4 nStops; \n vec4 nStops; \n
vec4 centerPos; \n vec4 centerPos; \n
@ -205,7 +204,7 @@ std::string STR_RADIAL_GRADIENT_VARIABLES = TVG_COMPOSE_SHADER(
} uGradientInfo ; \n } uGradientInfo ; \n
); );
std::string STR_RADIAL_GRADIENT_MAIN = TVG_COMPOSE_SHADER( const char* STR_RADIAL_GRADIENT_MAIN = TVG_COMPOSE_SHADER(
out vec4 FragColor; \n out vec4 FragColor; \n
\n \n
mat3 radial_matrix(vec2 p0, vec2 p1) \n mat3 radial_matrix(vec2 p0, vec2 p1) \n
@ -314,23 +313,6 @@ std::string STR_RADIAL_GRADIENT_MAIN = TVG_COMPOSE_SHADER(
} }
); );
std::string STR_LINEAR_GRADIENT_FRAG_SHADER =
STR_GRADIENT_FRAG_COMMON_VARIABLES +
STR_LINEAR_GRADIENT_VARIABLES +
STR_GRADIENT_FRAG_COMMON_FUNCTIONS +
STR_LINEAR_GRADIENT_MAIN;
const char* LINEAR_GRADIENT_FRAG_SHADER = STR_LINEAR_GRADIENT_FRAG_SHADER.c_str();
std::string STR_RADIAL_GRADIENT_FRAG_SHADER =
STR_GRADIENT_FRAG_COMMON_VARIABLES +
STR_RADIAL_GRADIENT_VARIABLES +
STR_GRADIENT_FRAG_COMMON_FUNCTIONS +
STR_RADIAL_GRADIENT_MAIN;
const char* RADIAL_GRADIENT_FRAG_SHADER = STR_RADIAL_GRADIENT_FRAG_SHADER.c_str();
const char* IMAGE_VERT_SHADER = TVG_COMPOSE_SHADER( const char* IMAGE_VERT_SHADER = TVG_COMPOSE_SHADER(
uniform float uDepth; \n uniform float uDepth; \n
layout (location = 0) in vec2 aLocation; \n layout (location = 0) in vec2 aLocation; \n

View file

@ -26,8 +26,12 @@
extern const char* COLOR_VERT_SHADER; extern const char* COLOR_VERT_SHADER;
extern const char* COLOR_FRAG_SHADER; extern const char* COLOR_FRAG_SHADER;
extern const char* GRADIENT_VERT_SHADER; extern const char* GRADIENT_VERT_SHADER;
extern const char* LINEAR_GRADIENT_FRAG_SHADER; extern const char* STR_GRADIENT_FRAG_COMMON_VARIABLES;
extern const char* RADIAL_GRADIENT_FRAG_SHADER; extern const char* STR_GRADIENT_FRAG_COMMON_FUNCTIONS;
extern const char* STR_LINEAR_GRADIENT_VARIABLES;
extern const char* STR_LINEAR_GRADIENT_MAIN;
extern const char* STR_RADIAL_GRADIENT_VARIABLES;
extern const char* STR_RADIAL_GRADIENT_MAIN;
extern const char* IMAGE_VERT_SHADER; extern const char* IMAGE_VERT_SHADER;
extern const char* IMAGE_FRAG_SHADER; extern const char* IMAGE_FRAG_SHADER;
extern const char* MASK_VERT_SHADER; extern const char* MASK_VERT_SHADER;