From f1c7fe6cdf23e31cddf177bada6dc860318d780a Mon Sep 17 00:00:00 2001 From: IonutParau Date: Thu, 19 Mar 2026 10:23:41 +0100 Subject: [PATCH] small fix --- src/main.c | 1 + src/neonucleus.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 353ee95..c3886ab 100644 --- a/src/main.c +++ b/src/main.c @@ -500,6 +500,7 @@ ne_ScreenBuffer *ne_gpu_currentBuffer(ne_GPUState *state) { } nn_Exit ne_gpu_handler(nn_GPURequest *req) { + // completely rewrite this buggy and incomplete mess. nn_Computer *C = req->computer; ne_GPUState *state = req->instance; diff --git a/src/neonucleus.c b/src/neonucleus.c index 5d6f673..c6ab86c 100644 --- a/src/neonucleus.c +++ b/src/neonucleus.c @@ -3591,6 +3591,7 @@ nn_Exit nn_gpu_handler(nn_ComponentRequest *req) { req->methodEnabled = true; return NN_OK; case NN_COMP_CALL: + // TODO: completely rewrite this buggy mess if(method == NN_GPUNUM_BIND) { if(nn_checkstring(C, 0, "bad argument #1 (string expected)")) return NN_EBADCALL; err = nn_defaultboolean(C, 1, false); @@ -3746,13 +3747,26 @@ nn_Exit nn_gpu_handler(nn_ComponentRequest *req) { req->returnCount = 1; return nn_pushinteger(C, greq.x); } - if(method == NN_GPUNUM_SETDEPTH) { + if(method == NN_GPUNUM_MAXDEPTH) { greq.action = NN_GPU_MAXDEPTH; err = state->handler(&greq); if(err) return err; req->returnCount = 1; return nn_pushinteger(C, greq.x); } + if(method == NN_GPUNUM_SETDEPTH) { + if(nn_checkinteger(C, 0, "bad argument #1 (bitdepth expected)")) return NN_EBADCALL; + greq.action = NN_GPU_SETDEPTH; + err = state->handler(&greq); + greq.x = nn_tointeger(C, 0); + if(nn_depthName(greq.x) == NULL) { + nn_setError(C, "bad depth"); + return NN_EBADCALL; + } + if(err) return err; + req->returnCount = 1; + return nn_pushstring(C, nn_depthName(greq.x)); + } if(method == NN_GPUNUM_GETVIEWPORT) { greq.action = NN_GPU_GETVIEWPORT; err = state->handler(&greq); @@ -3836,6 +3850,20 @@ nn_Exit nn_gpu_handler(nn_ComponentRequest *req) { if(err) return err; return NN_OK; } + // VRAM shenanigans + if(method == NN_GPUNUM_GETBUFFERSIZE) { + err = nn_defaultinteger(C, 0, 0); + if(err) return err; + if(nn_checkinteger(C, 0, "bad argument #1 (integer expected)")) return NN_EBADCALL; + greq.x = nn_tointeger(C, 0); + greq.action = greq.x == 0 ? NN_GPU_GETRESOLUTION : NN_GPU_GETBUFFERSIZE; + err = state->handler(&greq); + if(err) return err; + req->returnCount = 2; + err = nn_pushinteger(C, greq.width); + if(err) return err; + return nn_pushinteger(C, greq.height); + } nn_setError(C, "method not yet implemented"); return NN_EBADCALL; }