mirror of https://github.com/encounter/SDL.git
Vita: refactor gxm texture render and add SDL_RenderGeometry support
This commit is contained in:
parent
2a8938f2bf
commit
79ec8986d3
|
@ -88,6 +88,14 @@ static int VITA_GXM_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd,
|
||||||
const SDL_Rect * srcrect, const SDL_FRect * dstrect,
|
const SDL_Rect * srcrect, const SDL_FRect * dstrect,
|
||||||
const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
|
const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
|
||||||
|
|
||||||
|
#if SDL_HAVE_RENDER_GEOMETRY
|
||||||
|
static int
|
||||||
|
VITA_GXM_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
|
||||||
|
const float *xy, int xy_stride, const int *color, int color_stride, const float *uv, int uv_stride,
|
||||||
|
int num_vertices, const void *indices, int num_indices, int size_indices,
|
||||||
|
float scale_x, float scale_y);
|
||||||
|
#endif
|
||||||
|
|
||||||
static int VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd);
|
static int VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd);
|
||||||
|
|
||||||
static int VITA_GXM_RenderDrawPoints(SDL_Renderer *renderer, const SDL_RenderCommand *cmd);
|
static int VITA_GXM_RenderDrawPoints(SDL_Renderer *renderer, const SDL_RenderCommand *cmd);
|
||||||
|
@ -160,7 +168,6 @@ StartDrawing(SDL_Renderer *renderer)
|
||||||
data->drawstate.vertex_program = NULL;
|
data->drawstate.vertex_program = NULL;
|
||||||
data->drawstate.fragment_program = NULL;
|
data->drawstate.fragment_program = NULL;
|
||||||
data->drawstate.last_command = -1;
|
data->drawstate.last_command = -1;
|
||||||
data->drawstate.texture_color = 0xFFFFFFFF;
|
|
||||||
data->drawstate.viewport_dirty = SDL_TRUE;
|
data->drawstate.viewport_dirty = SDL_TRUE;
|
||||||
|
|
||||||
// reset blend mode
|
// reset blend mode
|
||||||
|
@ -168,7 +175,6 @@ StartDrawing(SDL_Renderer *renderer)
|
||||||
// fragment_programs *in = &data->blendFragmentPrograms.blend_mode_blend;
|
// fragment_programs *in = &data->blendFragmentPrograms.blend_mode_blend;
|
||||||
// data->colorFragmentProgram = in->color;
|
// data->colorFragmentProgram = in->color;
|
||||||
// data->textureFragmentProgram = in->texture;
|
// data->textureFragmentProgram = in->texture;
|
||||||
// data->textureTintFragmentProgram = in->textureTint;
|
|
||||||
|
|
||||||
if (renderer->target == NULL) {
|
if (renderer->target == NULL) {
|
||||||
sceGxmBeginScene(
|
sceGxmBeginScene(
|
||||||
|
@ -250,6 +256,9 @@ VITA_GXM_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||||
renderer->QueueFillRects = VITA_GXM_QueueFillRects;
|
renderer->QueueFillRects = VITA_GXM_QueueFillRects;
|
||||||
renderer->QueueCopy = VITA_GXM_QueueCopy;
|
renderer->QueueCopy = VITA_GXM_QueueCopy;
|
||||||
renderer->QueueCopyEx = VITA_GXM_QueueCopyEx;
|
renderer->QueueCopyEx = VITA_GXM_QueueCopyEx;
|
||||||
|
#if SDL_HAVE_RENDER_GEOMETRY
|
||||||
|
renderer->QueueGeometry = VITA_GXM_QueueGeometry;
|
||||||
|
#endif
|
||||||
renderer->RunCommandQueue = VITA_GXM_RunCommandQueue;
|
renderer->RunCommandQueue = VITA_GXM_RunCommandQueue;
|
||||||
renderer->RenderReadPixels = VITA_GXM_RenderReadPixels;
|
renderer->RenderReadPixels = VITA_GXM_RenderReadPixels;
|
||||||
renderer->RenderPresent = VITA_GXM_RenderPresent;
|
renderer->RenderPresent = VITA_GXM_RenderPresent;
|
||||||
|
@ -434,7 +443,6 @@ VITA_GXM_SetBlendMode(VITA_GXM_RenderData *data, int blendMode)
|
||||||
}
|
}
|
||||||
data->colorFragmentProgram = in->color;
|
data->colorFragmentProgram = in->color;
|
||||||
data->textureFragmentProgram = in->texture;
|
data->textureFragmentProgram = in->texture;
|
||||||
data->textureTintFragmentProgram = in->textureTint;
|
|
||||||
data->currentBlendMode = blendMode;
|
data->currentBlendMode = blendMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,7 +487,6 @@ VITA_GXM_QueueDrawPoints(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const
|
||||||
{
|
{
|
||||||
vertex[i].x = points[i].x;
|
vertex[i].x = points[i].x;
|
||||||
vertex[i].y = points[i].y;
|
vertex[i].y = points[i].y;
|
||||||
vertex[i].z = +0.5f;
|
|
||||||
vertex[i].color = color;
|
vertex[i].color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -505,12 +512,10 @@ VITA_GXM_QueueDrawLines(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const S
|
||||||
{
|
{
|
||||||
vertex[i*2].x = points[i].x;
|
vertex[i*2].x = points[i].x;
|
||||||
vertex[i*2].y = points[i].y;
|
vertex[i*2].y = points[i].y;
|
||||||
vertex[i*2].z = +0.5f;
|
|
||||||
vertex[i*2].color = color;
|
vertex[i*2].color = color;
|
||||||
|
|
||||||
vertex[i*2+1].x = points[i+1].x;
|
vertex[i*2+1].x = points[i+1].x;
|
||||||
vertex[i*2+1].y = points[i+1].y;
|
vertex[i*2+1].y = points[i+1].y;
|
||||||
vertex[i*2+1].z = +0.5f;
|
|
||||||
vertex[i*2+1].color = color;
|
vertex[i*2+1].color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,22 +543,18 @@ VITA_GXM_QueueFillRects(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const S
|
||||||
|
|
||||||
vertices[4*i+0].x = rect->x;
|
vertices[4*i+0].x = rect->x;
|
||||||
vertices[4*i+0].y = rect->y;
|
vertices[4*i+0].y = rect->y;
|
||||||
vertices[4*i+0].z = +0.5f;
|
|
||||||
vertices[4*i+0].color = color;
|
vertices[4*i+0].color = color;
|
||||||
|
|
||||||
vertices[4*i+1].x = rect->x + rect->w;
|
vertices[4*i+1].x = rect->x + rect->w;
|
||||||
vertices[4*i+1].y = rect->y;
|
vertices[4*i+1].y = rect->y;
|
||||||
vertices[4*i+1].z = +0.5f;
|
|
||||||
vertices[4*i+1].color = color;
|
vertices[4*i+1].color = color;
|
||||||
|
|
||||||
vertices[4*i+2].x = rect->x;
|
vertices[4*i+2].x = rect->x;
|
||||||
vertices[4*i+2].y = rect->y + rect->h;
|
vertices[4*i+2].y = rect->y + rect->h;
|
||||||
vertices[4*i+2].z = +0.5f;
|
|
||||||
vertices[4*i+2].color = color;
|
vertices[4*i+2].color = color;
|
||||||
|
|
||||||
vertices[4*i+3].x = rect->x + rect->w;
|
vertices[4*i+3].x = rect->x + rect->w;
|
||||||
vertices[4*i+3].y = rect->y + rect->h;
|
vertices[4*i+3].y = rect->y + rect->h;
|
||||||
vertices[4*i+3].z = +0.5f;
|
|
||||||
vertices[4*i+3].color = color;
|
vertices[4*i+3].color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,6 +578,7 @@ VITA_GXM_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture
|
||||||
texture_vertex *vertices;
|
texture_vertex *vertices;
|
||||||
float u0, v0, u1, v1;
|
float u0, v0, u1, v1;
|
||||||
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
|
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
|
||||||
|
Uint32 texture_color = (cmd->data.draw.r << 0) | (cmd->data.draw.g << 8) | (cmd->data.draw.b << 16) | (cmd->data.draw.a << 24);
|
||||||
|
|
||||||
cmd->data.draw.count = 1;
|
cmd->data.draw.count = 1;
|
||||||
|
|
||||||
|
@ -595,25 +597,25 @@ VITA_GXM_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture
|
||||||
|
|
||||||
vertices[0].x = dstrect->x;
|
vertices[0].x = dstrect->x;
|
||||||
vertices[0].y = dstrect->y;
|
vertices[0].y = dstrect->y;
|
||||||
vertices[0].z = +0.5f;
|
vertices[0].color = texture_color;
|
||||||
vertices[0].u = u0;
|
vertices[0].u = u0;
|
||||||
vertices[0].v = v0;
|
vertices[0].v = v0;
|
||||||
|
|
||||||
vertices[1].x = dstrect->x + dstrect->w;
|
vertices[1].x = dstrect->x + dstrect->w;
|
||||||
vertices[1].y = dstrect->y;
|
vertices[1].y = dstrect->y;
|
||||||
vertices[1].z = +0.5f;
|
vertices[1].color = texture_color;
|
||||||
vertices[1].u = u1;
|
vertices[1].u = u1;
|
||||||
vertices[1].v = v0;
|
vertices[1].v = v0;
|
||||||
|
|
||||||
vertices[2].x = dstrect->x;
|
vertices[2].x = dstrect->x;
|
||||||
vertices[2].y = dstrect->y + dstrect->h;
|
vertices[2].y = dstrect->y + dstrect->h;
|
||||||
vertices[2].z = +0.5f;
|
vertices[2].color = texture_color;
|
||||||
vertices[2].u = u0;
|
vertices[2].u = u0;
|
||||||
vertices[2].v = v1;
|
vertices[2].v = v1;
|
||||||
|
|
||||||
vertices[3].x = dstrect->x + dstrect->w;
|
vertices[3].x = dstrect->x + dstrect->w;
|
||||||
vertices[3].y = dstrect->y + dstrect->h;
|
vertices[3].y = dstrect->y + dstrect->h;
|
||||||
vertices[3].z = +0.5f;
|
vertices[3].color = texture_color;
|
||||||
vertices[3].u = u1;
|
vertices[3].u = u1;
|
||||||
vertices[3].v = v1;
|
vertices[3].v = v1;
|
||||||
|
|
||||||
|
@ -633,6 +635,7 @@ VITA_GXM_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Textur
|
||||||
float s, c;
|
float s, c;
|
||||||
const float centerx = center->x + dstrect->x;
|
const float centerx = center->x + dstrect->x;
|
||||||
const float centery = center->y + dstrect->y;
|
const float centery = center->y + dstrect->y;
|
||||||
|
Uint32 texture_color = (cmd->data.draw.r << 0) | (cmd->data.draw.g << 8) | (cmd->data.draw.b << 16) | (cmd->data.draw.a << 24);
|
||||||
|
|
||||||
cmd->data.draw.count = 1;
|
cmd->data.draw.count = 1;
|
||||||
|
|
||||||
|
@ -669,28 +672,27 @@ VITA_GXM_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Textur
|
||||||
|
|
||||||
vertices[0].x = x0 - centerx;
|
vertices[0].x = x0 - centerx;
|
||||||
vertices[0].y = y0 - centery;
|
vertices[0].y = y0 - centery;
|
||||||
vertices[0].z = +0.5f;
|
|
||||||
vertices[0].u = u0;
|
vertices[0].u = u0;
|
||||||
vertices[0].v = v0;
|
vertices[0].v = v0;
|
||||||
|
vertices[0].color = texture_color;
|
||||||
|
|
||||||
vertices[1].x = x1 - centerx;
|
vertices[1].x = x1 - centerx;
|
||||||
vertices[1].y = y0 - centery;
|
vertices[1].y = y0 - centery;
|
||||||
vertices[1].z = +0.5f;
|
|
||||||
vertices[1].u = u1;
|
vertices[1].u = u1;
|
||||||
vertices[1].v = v0;
|
vertices[1].v = v0;
|
||||||
|
vertices[1].color = texture_color;
|
||||||
|
|
||||||
vertices[2].x = x0 - centerx;
|
vertices[2].x = x0 - centerx;
|
||||||
vertices[2].y = y1 - centery;
|
vertices[2].y = y1 - centery;
|
||||||
vertices[2].z = +0.5f;
|
|
||||||
vertices[2].u = u0;
|
vertices[2].u = u0;
|
||||||
vertices[2].v = v1;
|
vertices[2].v = v1;
|
||||||
|
vertices[2].color = texture_color;
|
||||||
|
|
||||||
vertices[3].x = x1 - centerx;
|
vertices[3].x = x1 - centerx;
|
||||||
vertices[3].y = y1 - centery;
|
vertices[3].y = y1 - centery;
|
||||||
vertices[3].z = +0.5f;
|
|
||||||
vertices[3].u = u1;
|
vertices[3].u = u1;
|
||||||
vertices[3].v = v1;
|
vertices[3].v = v1;
|
||||||
|
vertices[3].color = texture_color;
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
|
@ -704,6 +706,103 @@ VITA_GXM_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Textur
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if SDL_HAVE_RENDER_GEOMETRY
|
||||||
|
static int
|
||||||
|
VITA_GXM_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
|
||||||
|
const float *xy, int xy_stride, const int *color, int color_stride, const float *uv, int uv_stride,
|
||||||
|
int num_vertices, const void *indices, int num_indices, int size_indices,
|
||||||
|
float scale_x, float scale_y)
|
||||||
|
{
|
||||||
|
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
|
||||||
|
int i;
|
||||||
|
int count = indices ? num_indices : num_vertices;
|
||||||
|
|
||||||
|
cmd->data.draw.count = count;
|
||||||
|
size_indices = indices ? size_indices : 0;
|
||||||
|
|
||||||
|
if (texture) {
|
||||||
|
texture_vertex *vertices;
|
||||||
|
|
||||||
|
vertices = (texture_vertex *)pool_memalign(
|
||||||
|
data,
|
||||||
|
count * sizeof(texture_vertex),
|
||||||
|
sizeof(texture_vertex));
|
||||||
|
|
||||||
|
if (!vertices) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
int j;
|
||||||
|
float *xy_;
|
||||||
|
float *uv_;
|
||||||
|
int col_;
|
||||||
|
if (size_indices == 4) {
|
||||||
|
j = ((const Uint32 *)indices)[i];
|
||||||
|
} else if (size_indices == 2) {
|
||||||
|
j = ((const Uint16 *)indices)[i];
|
||||||
|
} else if (size_indices == 1) {
|
||||||
|
j = ((const Uint8 *)indices)[i];
|
||||||
|
} else {
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
xy_ = (float *)((char*)xy + j * xy_stride);
|
||||||
|
col_ = *(int *)((char*)color + j * color_stride);
|
||||||
|
uv_ = (float *)((char*)uv + j * uv_stride);
|
||||||
|
|
||||||
|
vertices[i].x = xy_[0] * scale_x;
|
||||||
|
vertices[i].y = xy_[1] * scale_y;
|
||||||
|
vertices[i].u = uv_[0];
|
||||||
|
vertices[i].v = uv_[1];
|
||||||
|
vertices[i].color = col_;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd->data.draw.first = (size_t)vertices;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
color_vertex *vertices;
|
||||||
|
|
||||||
|
vertices = (color_vertex *)pool_memalign(
|
||||||
|
data,
|
||||||
|
count * sizeof(color_vertex),
|
||||||
|
sizeof(color_vertex));
|
||||||
|
|
||||||
|
if (!vertices) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
int j;
|
||||||
|
float *xy_;
|
||||||
|
int col_;
|
||||||
|
if (size_indices == 4) {
|
||||||
|
j = ((const Uint32 *)indices)[i];
|
||||||
|
} else if (size_indices == 2) {
|
||||||
|
j = ((const Uint16 *)indices)[i];
|
||||||
|
} else if (size_indices == 1) {
|
||||||
|
j = ((const Uint8 *)indices)[i];
|
||||||
|
} else {
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
xy_ = (float *)((char*)xy + j * xy_stride);
|
||||||
|
col_ = *(int *)((char*)color + j * color_stride);
|
||||||
|
|
||||||
|
vertices[i].x = xy_[0] * scale_x;
|
||||||
|
vertices[i].y = xy_[1] * scale_y;
|
||||||
|
vertices[i].color = col_;
|
||||||
|
}
|
||||||
|
cmd->data.draw.first = (size_t)vertices;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||||
{
|
{
|
||||||
|
@ -774,7 +873,7 @@ VITA_GXM_RenderFillRects(SDL_Renderer *renderer, const SDL_RenderCommand *cmd)
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd, SDL_bool solid)
|
SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd)
|
||||||
{
|
{
|
||||||
SDL_Texture *texture = cmd->data.draw.texture;
|
SDL_Texture *texture = cmd->data.draw.texture;
|
||||||
const SDL_BlendMode blend = cmd->data.draw.blend;
|
const SDL_BlendMode blend = cmd->data.draw.blend;
|
||||||
|
@ -782,13 +881,6 @@ SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd, SDL_bool s
|
||||||
SceGxmVertexProgram *vertex_program;
|
SceGxmVertexProgram *vertex_program;
|
||||||
SDL_bool matrix_updated = SDL_FALSE;
|
SDL_bool matrix_updated = SDL_FALSE;
|
||||||
SDL_bool program_updated = SDL_FALSE;
|
SDL_bool program_updated = SDL_FALSE;
|
||||||
Uint32 texture_color;
|
|
||||||
|
|
||||||
Uint8 r, g, b, a;
|
|
||||||
r = cmd->data.draw.r;
|
|
||||||
g = cmd->data.draw.g;
|
|
||||||
b = cmd->data.draw.b;
|
|
||||||
a = cmd->data.draw.a;
|
|
||||||
|
|
||||||
if (data->drawstate.viewport_dirty) {
|
if (data->drawstate.viewport_dirty) {
|
||||||
const SDL_Rect *viewport = &data->drawstate.viewport;
|
const SDL_Rect *viewport = &data->drawstate.viewport;
|
||||||
|
@ -834,11 +926,7 @@ SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd, SDL_bool s
|
||||||
|
|
||||||
if (texture) {
|
if (texture) {
|
||||||
vertex_program = data->textureVertexProgram;
|
vertex_program = data->textureVertexProgram;
|
||||||
if(cmd->data.draw.r == 255 && cmd->data.draw.g == 255 && cmd->data.draw.b == 255 && cmd->data.draw.a == 255) {
|
fragment_program = data->textureFragmentProgram;
|
||||||
fragment_program = data->textureFragmentProgram;
|
|
||||||
} else {
|
|
||||||
fragment_program = data->textureTintFragmentProgram;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
vertex_program = data->colorVertexProgram;
|
vertex_program = data->colorVertexProgram;
|
||||||
fragment_program = data->colorFragmentProgram;
|
fragment_program = data->colorFragmentProgram;
|
||||||
|
@ -856,58 +944,17 @@ SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd, SDL_bool s
|
||||||
program_updated = SDL_TRUE;
|
program_updated = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
texture_color = ((a << 24) | (b << 16) | (g << 8) | r);
|
|
||||||
|
|
||||||
if (program_updated || matrix_updated) {
|
if (program_updated || matrix_updated) {
|
||||||
if (data->drawstate.fragment_program == data->textureFragmentProgram) {
|
if (data->drawstate.fragment_program == data->textureFragmentProgram) {
|
||||||
void *vertex_wvp_buffer;
|
void *vertex_wvp_buffer;
|
||||||
sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertex_wvp_buffer);
|
sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertex_wvp_buffer);
|
||||||
sceGxmSetUniformDataF(vertex_wvp_buffer, data->textureWvpParam, 0, 16, data->ortho_matrix);
|
sceGxmSetUniformDataF(vertex_wvp_buffer, data->textureWvpParam, 0, 16, data->ortho_matrix);
|
||||||
} else if (data->drawstate.fragment_program == data->textureTintFragmentProgram) {
|
|
||||||
void *vertex_wvp_buffer;
|
|
||||||
void *texture_tint_color_buffer;
|
|
||||||
float *tint_color;
|
|
||||||
sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertex_wvp_buffer);
|
|
||||||
sceGxmSetUniformDataF(vertex_wvp_buffer, data->textureWvpParam, 0, 16, data->ortho_matrix);
|
|
||||||
|
|
||||||
sceGxmReserveFragmentDefaultUniformBuffer(data->gxm_context, &texture_tint_color_buffer);
|
|
||||||
|
|
||||||
tint_color = pool_memalign(
|
|
||||||
data,
|
|
||||||
4 * sizeof(float), // RGBA
|
|
||||||
sizeof(float)
|
|
||||||
);
|
|
||||||
|
|
||||||
tint_color[0] = r / 255.0f;
|
|
||||||
tint_color[1] = g / 255.0f;
|
|
||||||
tint_color[2] = b / 255.0f;
|
|
||||||
tint_color[3] = a / 255.0f;
|
|
||||||
sceGxmSetUniformDataF(texture_tint_color_buffer, data->textureTintColorParam, 0, 4, tint_color);
|
|
||||||
data->drawstate.texture_color = texture_color;
|
|
||||||
} else { // color
|
} else { // color
|
||||||
void *vertexDefaultBuffer;
|
void *vertexDefaultBuffer;
|
||||||
sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertexDefaultBuffer);
|
sceGxmReserveVertexDefaultUniformBuffer(data->gxm_context, &vertexDefaultBuffer);
|
||||||
sceGxmSetUniformDataF(vertexDefaultBuffer, data->colorWvpParam, 0, 16, data->ortho_matrix);
|
sceGxmSetUniformDataF(vertexDefaultBuffer, data->colorWvpParam, 0, 16, data->ortho_matrix);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (data->drawstate.fragment_program == data->textureTintFragmentProgram && data->drawstate.texture_color != texture_color) {
|
|
||||||
void *texture_tint_color_buffer;
|
|
||||||
float *tint_color;
|
|
||||||
sceGxmReserveFragmentDefaultUniformBuffer(data->gxm_context, &texture_tint_color_buffer);
|
|
||||||
|
|
||||||
tint_color = pool_memalign(
|
|
||||||
data,
|
|
||||||
4 * sizeof(float), // RGBA
|
|
||||||
sizeof(float)
|
|
||||||
);
|
|
||||||
|
|
||||||
tint_color[0] = r / 255.0f;
|
|
||||||
tint_color[1] = g / 255.0f;
|
|
||||||
tint_color[2] = b / 255.0f;
|
|
||||||
tint_color[3] = a / 255.0f;
|
|
||||||
sceGxmSetUniformDataF(texture_tint_color_buffer, data->textureTintColorParam, 0, 4, tint_color);
|
|
||||||
data->drawstate.texture_color = texture_color;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture != data->drawstate.texture) {
|
if (texture != data->drawstate.texture) {
|
||||||
|
@ -929,7 +976,7 @@ SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd)
|
||||||
{
|
{
|
||||||
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
|
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
|
||||||
|
|
||||||
return SetDrawState(data, cmd, SDL_FALSE);
|
return SetDrawState(data, cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -979,19 +1026,19 @@ VITA_GXM_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *
|
||||||
}
|
}
|
||||||
|
|
||||||
case SDL_RENDERCMD_DRAW_POINTS: {
|
case SDL_RENDERCMD_DRAW_POINTS: {
|
||||||
SetDrawState(data, cmd, SDL_FALSE);
|
SetDrawState(data, cmd);
|
||||||
VITA_GXM_RenderDrawPoints(renderer, cmd);
|
VITA_GXM_RenderDrawPoints(renderer, cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SDL_RENDERCMD_DRAW_LINES: {
|
case SDL_RENDERCMD_DRAW_LINES: {
|
||||||
SetDrawState(data, cmd, SDL_FALSE);
|
SetDrawState(data, cmd);
|
||||||
VITA_GXM_RenderDrawLines(renderer, cmd);
|
VITA_GXM_RenderDrawLines(renderer, cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SDL_RENDERCMD_FILL_RECTS: {
|
case SDL_RENDERCMD_FILL_RECTS: {
|
||||||
SetDrawState(data, cmd, SDL_FALSE);
|
SetDrawState(data, cmd);
|
||||||
VITA_GXM_RenderFillRects(renderer, cmd);
|
VITA_GXM_RenderFillRects(renderer, cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1004,6 +1051,24 @@ VITA_GXM_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case SDL_RENDERCMD_GEOMETRY: {
|
||||||
|
#if SDL_HAVE_RENDER_GEOMETRY
|
||||||
|
SDL_Texture *texture = cmd->data.draw.texture;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (texture) {
|
||||||
|
ret = SetCopyState(renderer, cmd);
|
||||||
|
} else {
|
||||||
|
ret = SetDrawState(data, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
sceGxmDraw(data->gxm_context, SCE_GXM_PRIMITIVE_TRIANGLES, SCE_GXM_INDEX_FORMAT_U16, data->linearIndices, cmd->data.draw.count);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SDL_RENDERCMD_NO_OP:
|
case SDL_RENDERCMD_NO_OP:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,37 +124,39 @@ static const unsigned char gxm_shader_color_f[gxm_shader_color_f_size] = {
|
||||||
0x7e, 0x0d, 0x80, 0x40,
|
0x7e, 0x0d, 0x80, 0x40,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define gxm_shader_color_v_size 352
|
#define gxm_shader_color_v_size 368
|
||||||
static const unsigned char gxm_shader_color_v[gxm_shader_color_v_size] = {
|
static const unsigned char gxm_shader_color_v[gxm_shader_color_v_size] = {
|
||||||
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
||||||
0x5d, 0x01, 0x00, 0x00, 0x4a, 0xb6, 0x4f, 0x7b,
|
0x6d, 0x01, 0x00, 0x00, 0x09, 0xce, 0x4e, 0xc2,
|
||||||
0x51, 0x19, 0x1a, 0xae, 0x00, 0x00, 0x19, 0x00,
|
0xe1, 0xcd, 0x24, 0xbc, 0x00, 0x00, 0x19, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
0x00, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||||
0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
0x74, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
0x74, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
0xa8, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
0xb8, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x06, 0x43, 0x00, 0x61,
|
||||||
|
0x86, 0x81, 0xa2, 0x00, 0x07, 0x53, 0x40, 0x61,
|
||||||
|
0x86, 0x81, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x01, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa,
|
||||||
0x80, 0x00, 0x08, 0x83, 0x21, 0x1d, 0x80, 0x38,
|
0x80, 0x00, 0x08, 0x83, 0x21, 0x1d, 0x80, 0x38,
|
||||||
0x02, 0x80, 0x81, 0xaf, 0x9c, 0x0d, 0xc0, 0x40,
|
0x00, 0x00, 0xf0, 0x83, 0x20, 0x0d, 0x80, 0x38,
|
||||||
0x0e, 0x86, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40,
|
0x0a, 0x84, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40,
|
||||||
0x04, 0x11, 0x49, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
|
||||||
0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
||||||
0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
||||||
0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
||||||
|
@ -172,142 +174,106 @@ static const unsigned char gxm_shader_color_v[gxm_shader_color_v_size] = {
|
||||||
0x00, 0x77, 0x76, 0x70, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x77, 0x76, 0x70, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define gxm_shader_texture_f_size 256
|
#define gxm_shader_texture_f_size 288
|
||||||
static const unsigned char gxm_shader_texture_f[gxm_shader_texture_f_size] = {
|
static const unsigned char gxm_shader_texture_f[gxm_shader_texture_f_size] = {
|
||||||
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
||||||
0x00, 0x01, 0x00, 0x00, 0x2f, 0x18, 0xe0, 0x2b,
|
0x20, 0x01, 0x00, 0x00, 0xeb, 0x4f, 0xb5, 0xba,
|
||||||
0x1f, 0x21, 0x47, 0x49, 0x01, 0x08, 0x18, 0x00,
|
0x60, 0xb2, 0xd0, 0x8d, 0x05, 0x18, 0x18, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
0xa4, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
0xc4, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00,
|
||||||
0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x78, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
0x78, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x64, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
0x84, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
|
0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
|
||||||
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04,
|
||||||
0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
0x00, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0xa9, 0xd0, 0x0e, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
0xf0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x07, 0x44, 0xfa, 0x30, 0x00, 0x00, 0x00,
|
0x00, 0x07, 0x44, 0xfa, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x02, 0x04, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
|
0x40, 0x09, 0x00, 0xf8, 0x02, 0x80, 0x99, 0xaf,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
|
0xbc, 0x0d, 0xc0, 0x40, 0x06, 0x82, 0xb9, 0xaf,
|
||||||
|
0xbc, 0x0d, 0x80, 0x40, 0x7c, 0x0f, 0x04, 0x00,
|
||||||
|
0x86, 0x47, 0xa4, 0x10, 0x30, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define gxm_shader_texture_tint_f_size 324
|
#define gxm_shader_texture_v_size 400
|
||||||
static const unsigned char gxm_shader_texture_tint_f[gxm_shader_texture_tint_f_size] = {
|
|
||||||
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
|
||||||
0x43, 0x01, 0x00, 0x00, 0x44, 0x2f, 0x5d, 0xfe,
|
|
||||||
0x9e, 0xda, 0xf8, 0x6f, 0x05, 0x08, 0x18, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
|
||||||
0xcc, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
|
||||||
0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00,
|
|
||||||
0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x78, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
|
||||||
0x84, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
|
|
||||||
0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04,
|
|
||||||
0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x07, 0x44, 0xfa, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x40, 0x09, 0x00, 0xf8, 0x02, 0x80, 0x99, 0xff,
|
|
||||||
0xbc, 0x0d, 0xc0, 0x40, 0x02, 0x80, 0xb9, 0xaf,
|
|
||||||
0xbc, 0x0d, 0x80, 0x40, 0x7c, 0x0f, 0x04, 0x00,
|
|
||||||
0x86, 0x47, 0xa4, 0x10, 0x0e, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0xe4, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
|
|
||||||
0x02, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0x69, 0x6e,
|
|
||||||
0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x74,
|
|
||||||
0x65, 0x78, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define gxm_shader_texture_v_size 344
|
|
||||||
static const unsigned char gxm_shader_texture_v[gxm_shader_texture_v_size] = {
|
static const unsigned char gxm_shader_texture_v[gxm_shader_texture_v_size] = {
|
||||||
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
0x47, 0x58, 0x50, 0x00, 0x01, 0x05, 0x50, 0x03,
|
||||||
0x58, 0x01, 0x00, 0x00, 0xa3, 0x36, 0x7b, 0x62,
|
0x8f, 0x01, 0x00, 0x00, 0x60, 0x1e, 0x69, 0x97,
|
||||||
0x1b, 0x80, 0x1c, 0xb0, 0x00, 0x00, 0x19, 0x00,
|
0x82, 0x7e, 0x0c, 0xac, 0x00, 0x00, 0x19, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
0xe8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
0x08, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||||
0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x00,
|
||||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
0x74, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
0x74, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
0xa0, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
0xc0, 0x00, 0x00, 0x00, 0xc0, 0x3d, 0x03, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x33, 0x0f, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x06,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0a,
|
||||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x06, 0x43, 0x00, 0x61,
|
||||||
|
0x86, 0x81, 0xa2, 0x00, 0x07, 0x53, 0x40, 0x61,
|
||||||
|
0x86, 0x81, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x01, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x44, 0xfa,
|
||||||
0x80, 0x00, 0x08, 0x83, 0x21, 0x0d, 0x80, 0x38,
|
0x01, 0x0e, 0x01, 0x01, 0x02, 0x00, 0x10, 0xfa,
|
||||||
0x02, 0x80, 0x81, 0xaf, 0x9c, 0x0d, 0xc0, 0x40,
|
0x80, 0x00, 0x08, 0x83, 0x21, 0x25, 0x80, 0x38,
|
||||||
0x0e, 0x86, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40,
|
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x14, 0xfa,
|
||||||
0x04, 0x11, 0x49, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
0x00, 0x00, 0xf0, 0x83, 0x20, 0x0d, 0x80, 0x38,
|
||||||
|
0x0a, 0x84, 0xb9, 0xff, 0xbc, 0x0d, 0xc0, 0x40,
|
||||||
0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
0x02, 0x11, 0x45, 0xcf, 0x80, 0x8f, 0xb1, 0x18,
|
||||||
0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
0x00, 0x11, 0x01, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
||||||
0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
0x01, 0xd1, 0x42, 0xc0, 0x81, 0x81, 0xb1, 0x18,
|
||||||
0x00, 0x00, 0x20, 0xa0, 0x00, 0x50, 0x27, 0xfb,
|
0x00, 0x00, 0x20, 0xa0, 0x00, 0x50, 0x27, 0xfb,
|
||||||
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
|
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
|
||||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x2a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
0x3a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
||||||
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
0x24, 0x00, 0x00, 0x00, 0x01, 0xe4, 0x00, 0x00,
|
0x34, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||||
|
0x2b, 0x00, 0x00, 0x00, 0x01, 0xe4, 0x00, 0x00,
|
||||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
|
0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
|
||||||
0x6e, 0x00, 0x61, 0x54, 0x65, 0x78, 0x63, 0x6f,
|
0x6e, 0x00, 0x61, 0x54, 0x65, 0x78, 0x63, 0x6f,
|
||||||
0x6f, 0x72, 0x64, 0x00, 0x77, 0x76, 0x70, 0x00,
|
0x6f, 0x72, 0x64, 0x00, 0x61, 0x43, 0x6f, 0x6c,
|
||||||
|
0x6f, 0x72, 0x00, 0x77, 0x76, 0x70, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const SceGxmProgram *const clearVertexProgramGxp = (const SceGxmProgram *)gxm_shader_clear_v;
|
||||||
static const SceGxmProgram *const clearVertexProgramGxp = (const SceGxmProgram*)gxm_shader_clear_v;
|
|
||||||
static const SceGxmProgram *const clearFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_clear_f;
|
static const SceGxmProgram *const clearFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_clear_f;
|
||||||
static const SceGxmProgram *const colorVertexProgramGxp = (const SceGxmProgram *)gxm_shader_color_v;
|
static const SceGxmProgram *const colorVertexProgramGxp = (const SceGxmProgram *)gxm_shader_color_v;
|
||||||
static const SceGxmProgram *const colorFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_color_f;
|
static const SceGxmProgram *const colorFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_color_f;
|
||||||
static const SceGxmProgram *const textureVertexProgramGxp = (const SceGxmProgram *)gxm_shader_texture_v;
|
static const SceGxmProgram *const textureVertexProgramGxp = (const SceGxmProgram *)gxm_shader_texture_v;
|
||||||
static const SceGxmProgram *const textureFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_texture_f;
|
static const SceGxmProgram *const textureFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_texture_f;
|
||||||
static const SceGxmProgram *const textureTintFragmentProgramGxp = (const SceGxmProgram *)gxm_shader_texture_tint_f;
|
|
||||||
|
|
||||||
#endif // SDL_RENDER_VITA_GXM_SHADERS_H
|
#endif // SDL_RENDER_VITA_GXM_SHADERS_H
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,6 @@ free_fragment_programs(VITA_GXM_RenderData *data, fragment_programs *out)
|
||||||
{
|
{
|
||||||
sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->color);
|
sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->color);
|
||||||
sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->texture);
|
sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->texture);
|
||||||
sceGxmShaderPatcherReleaseFragmentProgram(data->shaderPatcher, out->textureTint);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -202,21 +201,6 @@ make_fragment_programs(VITA_GXM_RenderData *data, fragment_programs *out,
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Patcher create fragment failed: %d\n", err);
|
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Patcher create fragment failed: %d\n", err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sceGxmShaderPatcherCreateFragmentProgram(
|
|
||||||
data->shaderPatcher,
|
|
||||||
data->textureTintFragmentProgramId,
|
|
||||||
SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4,
|
|
||||||
0,
|
|
||||||
blend_info,
|
|
||||||
textureVertexProgramGxp,
|
|
||||||
&out->textureTint
|
|
||||||
);
|
|
||||||
|
|
||||||
if (err != 0) {
|
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Patcher create fragment failed: %d\n", err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -232,22 +216,18 @@ set_stencil_mask(VITA_GXM_RenderData *data, float x, float y, float w, float h)
|
||||||
|
|
||||||
vertices[0].x = x;
|
vertices[0].x = x;
|
||||||
vertices[0].y = y;
|
vertices[0].y = y;
|
||||||
vertices[0].z = +0.5f;
|
|
||||||
vertices[0].color = 0;
|
vertices[0].color = 0;
|
||||||
|
|
||||||
vertices[1].x = x + w;
|
vertices[1].x = x + w;
|
||||||
vertices[1].y = y;
|
vertices[1].y = y;
|
||||||
vertices[1].z = +0.5f;
|
|
||||||
vertices[1].color = 0;
|
vertices[1].color = 0;
|
||||||
|
|
||||||
vertices[2].x = x;
|
vertices[2].x = x;
|
||||||
vertices[2].y = y + h;
|
vertices[2].y = y + h;
|
||||||
vertices[2].z = +0.5f;
|
|
||||||
vertices[2].color = 0;
|
vertices[2].color = 0;
|
||||||
|
|
||||||
vertices[3].x = x + w;
|
vertices[3].x = x + w;
|
||||||
vertices[3].y = y + h;
|
vertices[3].y = y + h;
|
||||||
vertices[3].z = +0.5f;
|
|
||||||
vertices[3].color = 0;
|
vertices[3].color = 0;
|
||||||
|
|
||||||
data->drawstate.fragment_program = data->colorFragmentProgram;
|
data->drawstate.fragment_program = data->colorFragmentProgram;
|
||||||
|
@ -654,12 +634,6 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sceGxmProgramCheck(textureTintFragmentProgramGxp);
|
|
||||||
if (err != 0) {
|
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "check program (texture tint fragment) failed: %d\n", err);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// register programs with the patcher
|
// register programs with the patcher
|
||||||
err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, clearVertexProgramGxp, &data->clearVertexProgramId);
|
err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, clearVertexProgramGxp, &data->clearVertexProgramId);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
@ -697,13 +671,6 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sceGxmShaderPatcherRegisterProgram(data->shaderPatcher, textureTintFragmentProgramGxp, &data->textureTintFragmentProgramId);
|
|
||||||
if (err != 0) {
|
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "register program (texture tint fragment) failed: %d\n", err);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// get attributes by name to create vertex format bindings
|
// get attributes by name to create vertex format bindings
|
||||||
const SceGxmProgramParameter *paramClearPositionAttribute = sceGxmProgramFindParameterByName(clearVertexProgramGxp, "aPosition");
|
const SceGxmProgramParameter *paramClearPositionAttribute = sceGxmProgramFindParameterByName(clearVertexProgramGxp, "aPosition");
|
||||||
|
@ -789,15 +756,15 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
// create color vertex format
|
// create color vertex format
|
||||||
SceGxmVertexAttribute colorVertexAttributes[2];
|
SceGxmVertexAttribute colorVertexAttributes[2];
|
||||||
SceGxmVertexStream colorVertexStreams[1];
|
SceGxmVertexStream colorVertexStreams[1];
|
||||||
/* x,y,z: 3 float 32 bits */
|
/* x,y: 2 float 32 bits */
|
||||||
colorVertexAttributes[0].streamIndex = 0;
|
colorVertexAttributes[0].streamIndex = 0;
|
||||||
colorVertexAttributes[0].offset = 0;
|
colorVertexAttributes[0].offset = 0;
|
||||||
colorVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
colorVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
||||||
colorVertexAttributes[0].componentCount = 3; // (x, y, z)
|
colorVertexAttributes[0].componentCount = 2; // (x, y)
|
||||||
colorVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorPositionAttribute);
|
colorVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorPositionAttribute);
|
||||||
/* color: 4 unsigned char = 32 bits */
|
/* color: 4 unsigned char = 32 bits */
|
||||||
colorVertexAttributes[1].streamIndex = 0;
|
colorVertexAttributes[1].streamIndex = 0;
|
||||||
colorVertexAttributes[1].offset = 12; // (x, y, z) * 4 = 12 bytes
|
colorVertexAttributes[1].offset = 8; // (x, y) * 4 = 8 bytes
|
||||||
colorVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_U8N;
|
colorVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_U8N;
|
||||||
colorVertexAttributes[1].componentCount = 4; // (color)
|
colorVertexAttributes[1].componentCount = 4; // (color)
|
||||||
colorVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorColorAttribute);
|
colorVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramColorColorAttribute);
|
||||||
|
@ -826,22 +793,29 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
{
|
{
|
||||||
const SceGxmProgramParameter *paramTexturePositionAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aPosition");
|
const SceGxmProgramParameter *paramTexturePositionAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aPosition");
|
||||||
const SceGxmProgramParameter *paramTextureTexcoordAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aTexcoord");
|
const SceGxmProgramParameter *paramTextureTexcoordAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aTexcoord");
|
||||||
|
const SceGxmProgramParameter *paramTextureColorAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aColor");
|
||||||
|
|
||||||
// create texture vertex format
|
// create texture vertex format
|
||||||
SceGxmVertexAttribute textureVertexAttributes[2];
|
SceGxmVertexAttribute textureVertexAttributes[3];
|
||||||
SceGxmVertexStream textureVertexStreams[1];
|
SceGxmVertexStream textureVertexStreams[1];
|
||||||
/* x,y,z: 3 float 32 bits */
|
/* x,y: 2 float 32 bits */
|
||||||
textureVertexAttributes[0].streamIndex = 0;
|
textureVertexAttributes[0].streamIndex = 0;
|
||||||
textureVertexAttributes[0].offset = 0;
|
textureVertexAttributes[0].offset = 0;
|
||||||
textureVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
textureVertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
||||||
textureVertexAttributes[0].componentCount = 3; // (x, y, z)
|
textureVertexAttributes[0].componentCount = 2; // (x, y)
|
||||||
textureVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramTexturePositionAttribute);
|
textureVertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(paramTexturePositionAttribute);
|
||||||
/* u,v: 2 floats 32 bits */
|
/* u,v: 2 floats 32 bits */
|
||||||
textureVertexAttributes[1].streamIndex = 0;
|
textureVertexAttributes[1].streamIndex = 0;
|
||||||
textureVertexAttributes[1].offset = 12; // (x, y, z) * 4 = 12 bytes
|
textureVertexAttributes[1].offset = 8; // (x, y) * 4 = 8 bytes
|
||||||
textureVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
textureVertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32;
|
||||||
textureVertexAttributes[1].componentCount = 2; // (u, v)
|
textureVertexAttributes[1].componentCount = 2; // (u, v)
|
||||||
textureVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramTextureTexcoordAttribute);
|
textureVertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(paramTextureTexcoordAttribute);
|
||||||
|
/* r,g,b,a: 4 unsigned chars 32 bits */
|
||||||
|
textureVertexAttributes[2].streamIndex = 0;
|
||||||
|
textureVertexAttributes[2].offset = 16; // (x, y, u, v) * 4 = 16 bytes
|
||||||
|
textureVertexAttributes[2].format = SCE_GXM_ATTRIBUTE_FORMAT_U8N;
|
||||||
|
textureVertexAttributes[2].componentCount = 4; // (r, g, b, a)
|
||||||
|
textureVertexAttributes[2].regIndex = sceGxmProgramParameterGetResourceIndex(paramTextureColorAttribute);
|
||||||
// 16 bit (short) indices
|
// 16 bit (short) indices
|
||||||
textureVertexStreams[0].stride = sizeof(texture_vertex);
|
textureVertexStreams[0].stride = sizeof(texture_vertex);
|
||||||
textureVertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT;
|
textureVertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT;
|
||||||
|
@ -851,13 +825,13 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
data->shaderPatcher,
|
data->shaderPatcher,
|
||||||
data->textureVertexProgramId,
|
data->textureVertexProgramId,
|
||||||
textureVertexAttributes,
|
textureVertexAttributes,
|
||||||
2,
|
3,
|
||||||
textureVertexStreams,
|
textureVertexStreams,
|
||||||
1,
|
1,
|
||||||
&data->textureVertexProgram
|
&data->textureVertexProgram
|
||||||
);
|
);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (texture vertex) failed: %d\n", err);
|
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "create program (texture vertex) failed: %x\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -876,7 +850,6 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
|
|
||||||
data->colorFragmentProgram = in->color;
|
data->colorFragmentProgram = in->color;
|
||||||
data->textureFragmentProgram = in->texture;
|
data->textureFragmentProgram = in->texture;
|
||||||
data->textureTintFragmentProgram = in->textureTint;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,7 +857,6 @@ gxm_init(SDL_Renderer *renderer)
|
||||||
data->clearClearColorParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uClearColor");
|
data->clearClearColorParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uClearColor");
|
||||||
data->colorWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(colorVertexProgramGxp, "wvp");
|
data->colorWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(colorVertexProgramGxp, "wvp");
|
||||||
data->textureWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(textureVertexProgramGxp, "wvp");
|
data->textureWvpParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(textureVertexProgramGxp, "wvp");
|
||||||
data->textureTintColorParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(textureTintFragmentProgramGxp, "uTintColor");
|
|
||||||
|
|
||||||
// Allocate memory for the memory pool
|
// Allocate memory for the memory pool
|
||||||
data->pool_addr[0] = mem_gpu_alloc(
|
data->pool_addr[0] = mem_gpu_alloc(
|
||||||
|
@ -963,7 +935,6 @@ void gxm_finish(SDL_Renderer *renderer)
|
||||||
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorFragmentProgramId);
|
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorFragmentProgramId);
|
||||||
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorVertexProgramId);
|
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->colorVertexProgramId);
|
||||||
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureFragmentProgramId);
|
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureFragmentProgramId);
|
||||||
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureTintFragmentProgramId);
|
|
||||||
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureVertexProgramId);
|
sceGxmShaderPatcherUnregisterProgram(data->shaderPatcher, data->textureVertexProgramId);
|
||||||
|
|
||||||
sceGxmShaderPatcherDestroy(data->shaderPatcher);
|
sceGxmShaderPatcherDestroy(data->shaderPatcher);
|
||||||
|
|
|
@ -61,16 +61,15 @@ typedef struct clear_vertex {
|
||||||
typedef struct color_vertex {
|
typedef struct color_vertex {
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
float z;
|
|
||||||
unsigned int color;
|
unsigned int color;
|
||||||
} color_vertex;
|
} color_vertex;
|
||||||
|
|
||||||
typedef struct texture_vertex {
|
typedef struct texture_vertex {
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
float z;
|
|
||||||
float u;
|
float u;
|
||||||
float v;
|
float v;
|
||||||
|
unsigned int color;
|
||||||
} texture_vertex;
|
} texture_vertex;
|
||||||
|
|
||||||
typedef struct gxm_texture {
|
typedef struct gxm_texture {
|
||||||
|
@ -85,7 +84,6 @@ typedef struct gxm_texture {
|
||||||
typedef struct fragment_programs {
|
typedef struct fragment_programs {
|
||||||
SceGxmFragmentProgram *color;
|
SceGxmFragmentProgram *color;
|
||||||
SceGxmFragmentProgram *texture;
|
SceGxmFragmentProgram *texture;
|
||||||
SceGxmFragmentProgram *textureTint;
|
|
||||||
} fragment_programs;
|
} fragment_programs;
|
||||||
|
|
||||||
typedef struct blend_fragment_programs {
|
typedef struct blend_fragment_programs {
|
||||||
|
@ -103,7 +101,6 @@ typedef struct
|
||||||
SDL_Texture *texture;
|
SDL_Texture *texture;
|
||||||
SDL_Texture *target;
|
SDL_Texture *target;
|
||||||
Uint32 color;
|
Uint32 color;
|
||||||
Uint32 texture_color;
|
|
||||||
SceGxmFragmentProgram *fragment_program;
|
SceGxmFragmentProgram *fragment_program;
|
||||||
SceGxmVertexProgram *vertex_program;
|
SceGxmVertexProgram *vertex_program;
|
||||||
int last_command;
|
int last_command;
|
||||||
|
@ -162,11 +159,9 @@ typedef struct
|
||||||
SceGxmFragmentProgram *colorFragmentProgram;
|
SceGxmFragmentProgram *colorFragmentProgram;
|
||||||
SceGxmVertexProgram *textureVertexProgram;
|
SceGxmVertexProgram *textureVertexProgram;
|
||||||
SceGxmFragmentProgram *textureFragmentProgram;
|
SceGxmFragmentProgram *textureFragmentProgram;
|
||||||
SceGxmFragmentProgram *textureTintFragmentProgram;
|
|
||||||
SceGxmProgramParameter *clearClearColorParam;
|
SceGxmProgramParameter *clearClearColorParam;
|
||||||
SceGxmProgramParameter *colorWvpParam;
|
SceGxmProgramParameter *colorWvpParam;
|
||||||
SceGxmProgramParameter *textureWvpParam;
|
SceGxmProgramParameter *textureWvpParam;
|
||||||
SceGxmProgramParameter *textureTintColorParam;
|
|
||||||
|
|
||||||
SceGxmShaderPatcher *shaderPatcher;
|
SceGxmShaderPatcher *shaderPatcher;
|
||||||
SceGxmVertexProgram *clearVertexProgram;
|
SceGxmVertexProgram *clearVertexProgram;
|
||||||
|
@ -178,7 +173,6 @@ typedef struct
|
||||||
SceGxmShaderPatcherId colorFragmentProgramId;
|
SceGxmShaderPatcherId colorFragmentProgramId;
|
||||||
SceGxmShaderPatcherId textureVertexProgramId;
|
SceGxmShaderPatcherId textureVertexProgramId;
|
||||||
SceGxmShaderPatcherId textureFragmentProgramId;
|
SceGxmShaderPatcherId textureFragmentProgramId;
|
||||||
SceGxmShaderPatcherId textureTintFragmentProgramId;
|
|
||||||
|
|
||||||
SceUID patcherBufferUid;
|
SceUID patcherBufferUid;
|
||||||
SceUID patcherVertexUsseUid;
|
SceUID patcherVertexUsseUid;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
void main(
|
void main(
|
||||||
float3 aPosition,
|
float2 aPosition,
|
||||||
float4 aColor,
|
float4 aColor,
|
||||||
uniform float4x4 wvp,
|
uniform float4x4 wvp,
|
||||||
out float4 vPosition : POSITION,
|
out float4 vPosition : POSITION,
|
||||||
|
@ -7,7 +7,7 @@ void main(
|
||||||
out float pSize : PSIZE
|
out float pSize : PSIZE
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
vPosition = mul(float4(aPosition, 1.f), wvp);
|
vPosition = mul(float4(aPosition, 1.f, 0.5f), wvp);
|
||||||
vColor = aColor;
|
vColor = aColor;
|
||||||
pSize = 1.f;
|
pSize = 1.f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
float4 main(float2 vTexcoord : TEXCOORD0, uniform sampler2D tex)
|
float4 main(float2 vTexcoord : TEXCOORD0, float4 vColor : COLOR, uniform sampler2D tex)
|
||||||
{
|
{
|
||||||
return tex2D(tex, vTexcoord);
|
return tex2D(tex, vTexcoord) * vColor;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
float4 main( float2 vTexcoord : TEXCOORD0, uniform sampler2D tex, uniform float4 uTintColor)
|
|
||||||
{
|
|
||||||
return tex2D(tex, vTexcoord) * uTintColor;
|
|
||||||
}
|
|
|
@ -1,11 +1,14 @@
|
||||||
void main(
|
void main(
|
||||||
float3 aPosition,
|
float2 aPosition,
|
||||||
float2 aTexcoord,
|
float2 aTexcoord,
|
||||||
|
float4 aColor,
|
||||||
uniform float4x4 wvp,
|
uniform float4x4 wvp,
|
||||||
out float4 vPosition : POSITION,
|
out float4 vPosition : POSITION,
|
||||||
|
out float4 vColor : COLOR,
|
||||||
out float2 vTexcoord : TEXCOORD0
|
out float2 vTexcoord : TEXCOORD0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
vPosition = mul(float4(aPosition, 1.f), wvp);
|
vPosition = mul(float4(aPosition, 1.f, 0.5f), wvp);
|
||||||
vTexcoord = aTexcoord;
|
vTexcoord = aTexcoord;
|
||||||
|
vColor = aColor;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue