diff --git a/internal/graphicsdriver/playstation5/graphics_playstation5.go b/internal/graphicsdriver/playstation5/graphics_playstation5.go index 333f2b68dd41..fa56df3f1e27 100644 --- a/internal/graphicsdriver/playstation5/graphics_playstation5.go +++ b/internal/graphicsdriver/playstation5/graphics_playstation5.go @@ -17,6 +17,7 @@ package playstation5 // #include "graphics_playstation5.h" +// #include import "C" import ( @@ -120,19 +121,14 @@ func (g *Graphics) MaxImageSize() int { func (g *Graphics) NewShader(program *shaderir.Program) (graphicsdriver.Shader, error) { s := precompiledShaders[program.SourceHash] - ps := C.ebitengine_PrecompiledShader{ - vertex_header: (*C.char)(unsafe.Pointer(unsafe.SliceData(s.vertexHeader))), - vertex_header_size: C.int(len(s.vertexHeader)), - vertex_text: (*C.char)(unsafe.Pointer(unsafe.SliceData(s.vertexText))), - vertex_text_size: C.int(len(s.vertexText)), - pixel_header: (*C.char)(unsafe.Pointer(unsafe.SliceData(s.pixelHeader))), - pixel_header_size: C.int(len(s.pixelHeader)), - pixel_text: (*C.char)(unsafe.Pointer(unsafe.SliceData(s.pixelText))), - pixel_text_size: C.int(len(s.pixelText)), - } + defer runtime.KeepAlive(s) var id C.int - if err := C.ebitengine_NewShader(&id, &ps); !C.ebitengine_IsErrorNil(&err) { + if err := C.ebitengine_NewShader(&id, + (*C.char)(unsafe.Pointer(unsafe.SliceData(s.vertexHeader))), C.int(len(s.vertexHeader)), + (*C.char)(unsafe.Pointer(unsafe.SliceData(s.vertexText))), C.int(len(s.vertexText)), + (*C.char)(unsafe.Pointer(unsafe.SliceData(s.pixelHeader))), C.int(len(s.pixelHeader)), + (*C.char)(unsafe.Pointer(unsafe.SliceData(s.pixelText))), C.int(len(s.pixelText))); !C.ebitengine_IsErrorNil(&err) { return nil, newPlaystation5Error("(*playstation5.Graphics).NewShader", err) } return &Shader{ diff --git a/internal/graphicsdriver/playstation5/graphics_playstation5.h b/internal/graphicsdriver/playstation5/graphics_playstation5.h index d518f87b960e..8df55e83126f 100644 --- a/internal/graphicsdriver/playstation5/graphics_playstation5.h +++ b/internal/graphicsdriver/playstation5/graphics_playstation5.h @@ -103,20 +103,10 @@ ebitengine_DrawTriangles(int dst, const int *srcs, int src_count, int shader, ebitengine_Blend blend, const uint32_t *uniforms, int uniform_count, int fill_rule); -typedef struct ebitengine_PrecompiledShader { - char *vertex_header; - int vertex_header_size; - char *vertex_text; - int vertex_text_size; - char *pixel_header; - int pixel_header_size; - char *pixel_text; - int pixel_text_size; -} ebitengine_PrecompiledShader; - -ebitengine_Error -ebitengine_NewShader(int *shader, - const ebitengine_PrecompiledShader *precompiled_shader); +ebitengine_Error ebitengine_NewShader( + int *shader, const char *vertex_header, int vertex_header_size, + const char *vertex_text, int vertex_text_size, const char *pixel_header, + int pixel_header_size, const char *pixel_text, int pixel_text_size); void ebitengine_DisposeShader(int id); #ifdef __cplusplus