mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +00:00
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:
parent
7d4a5215dd
commit
7bcee79077
3 changed files with 41 additions and 28 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue