2026-04-07 22:10:40 +02:00
|
|
|
#include "gpu_hw.h"
|
|
|
|
|
|
|
|
|
|
#ifdef USE_HARDWARE
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
2026-07-27 21:23:15 +02:00
|
|
|
/*
|
|
|
|
|
* ARMSX keeps the PlayStation GPU's 16-bit VRAM authoritative. SDL hardware
|
|
|
|
|
* acceleration is used only to upload, scale, composite, and present that
|
|
|
|
|
* software-accurate image. This compatibility object remains for embedders
|
|
|
|
|
* built against the earlier experimental renderer API; it never bypasses the
|
|
|
|
|
* core rasterizer.
|
|
|
|
|
*/
|
2026-04-07 22:10:40 +02:00
|
|
|
struct armsx_hw_renderer {
|
|
|
|
|
SDL_Renderer* renderer;
|
|
|
|
|
int width;
|
|
|
|
|
int height;
|
|
|
|
|
};
|
|
|
|
|
|
2026-07-27 21:23:15 +02:00
|
|
|
bool armsx_hw_renderer_is_supported(void) {
|
2026-04-07 22:10:40 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
armsx_hw_renderer_t* armsx_hw_renderer_create(SDL_Renderer* renderer) {
|
2026-07-27 21:23:15 +02:00
|
|
|
if (!renderer)
|
2026-04-07 22:10:40 +02:00
|
|
|
return NULL;
|
|
|
|
|
|
2026-07-27 21:23:15 +02:00
|
|
|
armsx_hw_renderer_t* hw = (armsx_hw_renderer_t*)calloc(1, sizeof(*hw));
|
|
|
|
|
if (hw)
|
|
|
|
|
hw->renderer = renderer;
|
2026-04-07 22:10:40 +02:00
|
|
|
return hw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void armsx_hw_renderer_destroy(armsx_hw_renderer_t* hw) {
|
|
|
|
|
free(hw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void armsx_hw_renderer_set_renderer(armsx_hw_renderer_t* hw, SDL_Renderer* renderer) {
|
2026-07-27 21:23:15 +02:00
|
|
|
if (hw)
|
2026-04-07 22:10:40 +02:00
|
|
|
hw->renderer = renderer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void armsx_hw_renderer_set_output_size(armsx_hw_renderer_t* hw, int width, int height) {
|
2026-07-27 21:23:15 +02:00
|
|
|
if (!hw)
|
2026-04-07 22:10:40 +02:00
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
hw->width = width;
|
|
|
|
|
hw->height = height;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void armsx_hw_renderer_begin_frame(armsx_hw_renderer_t* hw) {
|
2026-07-27 21:23:15 +02:00
|
|
|
(void)hw;
|
2026-04-07 22:10:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void armsx_hw_renderer_end_frame(armsx_hw_renderer_t* hw) {
|
2026-07-27 21:23:15 +02:00
|
|
|
(void)hw;
|
2026-04-07 22:10:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SDL_Texture* armsx_hw_renderer_overlay_texture(armsx_hw_renderer_t* hw) {
|
2026-07-27 21:23:15 +02:00
|
|
|
(void)hw;
|
|
|
|
|
return NULL;
|
2026-04-07 22:10:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void gpu_hw_render_triangle(psx_gpu_t* gpu, vertex_t v0, vertex_t v1, vertex_t v2, poly_data_t data, int edge) {
|
|
|
|
|
gpu_render_triangle(gpu, v0, v1, v2, data, edge);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|