Texture render target

This commit is contained in:
Ivan Epifanov 2020-11-23 12:45:51 +03:00 committed by Sam Lantinga
parent 63e223fa50
commit 94d7737bef

View File

@ -121,27 +121,45 @@ StartDrawing(SDL_Renderer *renderer)
{ {
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata; VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
if(data->drawing) if(data->drawing)
{
SDL_LogError(SDL_LOG_CATEGORY_RENDER, "uh-oh, already drawing\n");
return; return;
}
// reset blend mode // reset blend mode
data->currentBlendMode = SDL_BLENDMODE_BLEND; // data->currentBlendMode = SDL_BLENDMODE_BLEND;
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; // data->textureTintFragmentProgram = in->textureTint;
sceGxmBeginScene( if (renderer->target == NULL) {
data->gxm_context, sceGxmBeginScene(
0, data->gxm_context,
data->renderTarget, 0,
NULL, data->renderTarget,
NULL, NULL,
data->displayBufferSync[data->backBufferIndex], NULL,
&data->displaySurface[data->backBufferIndex], data->displayBufferSync[data->backBufferIndex],
&data->depthSurface &data->displaySurface[data->backBufferIndex],
); &data->depthSurface
);
} else {
VITA_GXM_TextureData *vita_texture = (VITA_GXM_TextureData *) renderer->target->driverdata;
unset_clip_rectangle(data); sceGxmBeginScene(
data->gxm_context,
0,
vita_texture->tex->gxm_rendertarget,
NULL,
NULL,
NULL,
&vita_texture->tex->gxm_colorsurface,
&vita_texture->tex->gxm_depthstencil
);
}
// unset_clip_rectangle(data);
data->drawing = SDL_TRUE; data->drawing = SDL_TRUE;
} }
@ -232,7 +250,7 @@ VITA_GXM_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
return SDL_OutOfMemory(); return SDL_OutOfMemory();
} }
vita_texture->tex = create_gxm_texture(data, texture->w, texture->h, SCE_GXM_TEXTURE_FORMAT_A8B8G8R8, 0); // TODO: rendertarget support, other formats vita_texture->tex = create_gxm_texture(data, texture->w, texture->h, SCE_GXM_TEXTURE_FORMAT_A8B8G8R8, (texture->access == SDL_TEXTUREACCESS_TARGET));
if (!vita_texture->tex) { if (!vita_texture->tex) {
SDL_free(vita_texture); SDL_free(vita_texture);
@ -329,7 +347,7 @@ VITA_GXM_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL
static int static int
VITA_GXM_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) VITA_GXM_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
{ {
return 0; // TODO return 0; // nothing to do here
} }
static void static void
@ -751,11 +769,7 @@ VITA_GXM_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *
} }
case SDL_RENDERCMD_SETVIEWPORT: { case SDL_RENDERCMD_SETVIEWPORT: {
/* SDL_Rect *viewport = &data->drawstate.viewport; // TODO
if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof (SDL_Rect)) != 0) {
SDL_memcpy(viewport, &cmd->data.viewport.rect, sizeof (SDL_Rect));
data->drawstate.viewport_dirty = SDL_TRUE;
}*/
break; break;
} }
@ -855,6 +869,9 @@ VITA_GXM_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *
cmd = cmd->next; cmd = cmd->next;
} }
sceGxmEndScene(data->gxm_context, NULL, NULL);
data->drawing = SDL_FALSE;
return 0; return 0;
} }
@ -879,10 +896,6 @@ VITA_GXM_RenderPresent(SDL_Renderer *renderer)
{ {
VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata; VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
if(!data->drawing)
return;
sceGxmEndScene(data->gxm_context, NULL, NULL);
sceGxmFinish(data->gxm_context); sceGxmFinish(data->gxm_context);
data->displayData.address = data->displayBufferData[data->backBufferIndex]; data->displayData.address = data->displayBufferData[data->backBufferIndex];