renderer now has camera matrix
Some checks failed
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled
Build and Deploy / build-windows (CLANG64) (push) Has been cancelled
Build and Deploy / build-linux (push) Has been cancelled

This commit is contained in:
2025-04-21 09:23:50 -05:00
parent b8328657df
commit c8c08d5fbe
3 changed files with 84 additions and 35 deletions

View File

@@ -1,7 +1,5 @@
var render = {}
var graphics = use('graphics')
var context
render.initialize = function(config)
@@ -10,7 +8,7 @@ render.initialize = function(config)
title:`Prosperon [${prosperon.version}-${prosperon.revision}]`,
width: 1280,
height: 720,
icon: graphics.make_texture(io.slurpbytes('icons/moon.gif')),
// icon: graphics.make_texture(io.slurpbytes('icons/moon.gif')),
high_dpi:0,
alpha:1,
fullscreen:0,
@@ -32,7 +30,8 @@ render.initialize = function(config)
// config[i] ??= default_conf[i]
prosperon.window = prosperon.engine_start({width:500,height:500})
context = prosperon.window.make_renderer()
console.log(prosperon.window)
context = prosperon.window.make_renderer("vulkan")
}
// img here is the engine surface
@@ -84,4 +83,14 @@ render.get_image = function(rect)
return context.get_image(rect)
}
render.clear = function()
{
context.clear()
}
render.present = function()
{
context.present()
}
return render

View File

@@ -1014,9 +1014,15 @@ void SDL_Window_free(JSRuntime *rt, SDL_Window *w)
SDL_DestroyWindow(w);
}
void SDL_Renderer_free(JSRuntime *rt, SDL_Renderer *r)
typedef struct renderer_ctx {
SDL_Renderer *sdl;
HMM_Mat4 cam;
} renderer_ctx;
void renderer_ctx_free(JSRuntime *rt, renderer_ctx *ctx)
{
SDL_DestroyRenderer(r);
SDL_DestroyRenderer(ctx->sdl);
free(ctx);
}
void SDL_Surface_free(JSRuntime *rt, SDL_Surface *s) {
@@ -1044,7 +1050,7 @@ void SDL_GPUCommandBuffer_free(JSRuntime *rt, SDL_GPUCommandBuffer *c)
{
}
QJSCLASS(SDL_Renderer,)
QJSCLASS(renderer_ctx,)
void SDL_GPUComputePass_free(JSRuntime *rt, SDL_GPUComputePass *c) { }
void SDL_GPUCopyPass_free(JSRuntime *rt, SDL_GPUCopyPass *c) { }
@@ -2554,11 +2560,16 @@ JSC_SCALL(SDL_Window_make_renderer,
SDL_SetNumberProperty(props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0);
SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, win);
SDL_SetStringProperty(props, SDL_PROP_RENDERER_CREATE_NAME_STRING, str);
SDL_Renderer *r = SDL_CreateRendererWithProperties(props);
renderer_ctx *ctx = malloc(sizeof(*ctx));
ctx->sdl = SDL_CreateRendererWithProperties(props);
ctx->cam = HMM_M4D(1.0);
SDL_DestroyProperties(props);
if (!r) return JS_ThrowReferenceError(js, "Error creating renderer: %s",SDL_GetError());
SDL_SetRenderDrawBlendMode(r, SDL_BLENDMODE_BLEND);
return SDL_Renderer2js(js,r);
if (!ctx->sdl) {
free(ctx);
return JS_ThrowReferenceError(js, "Error creating renderer: %s",SDL_GetError());
}
SDL_SetRenderDrawBlendMode(ctx->sdl, SDL_BLENDMODE_BLEND);
return renderer_ctx2js(js,ctx);
)
SDL_GPUShaderFormat js2SDL_GPUShaderFormat(JSContext *js, JSValue v)
@@ -2694,17 +2705,17 @@ static const JSCFunctionListEntry js_SDL_Window_funcs[] = {
};
JSC_CCALL(SDL_Renderer_clear,
SDL_Renderer *renderer = js2SDL_Renderer(js,self);
SDL_Renderer *renderer = js2renderer_ctx(js,self)->sdl;
SDL_RenderClear(renderer);
)
JSC_CCALL(SDL_Renderer_present,
SDL_Renderer *ren = js2SDL_Renderer(js,self);
SDL_Renderer *ren = js2renderer_ctx(js,self)->sdl;
SDL_RenderPresent(ren);
)
JSC_CCALL(SDL_Renderer_draw_color,
SDL_Renderer *renderer = js2SDL_Renderer(js,self);
SDL_Renderer *renderer = js2renderer_ctx(js,self)->sdl;
colorf color = js2color(js,argv[0]);
SDL_SetRenderDrawColorFloat(renderer, color.r,color.g,color.b,color.a);
)
@@ -2724,7 +2735,7 @@ SDL_GPUColorTargetInfo js2SDL_GPUColorTargetInfo(JSContext *js, JSValue v)
}
JSC_CCALL(renderer_load_texture,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
SDL_Surface *surf = js2SDL_Surface(js,argv[0]);
if (!surf) return JS_ThrowReferenceError(js, "Surface was not a surface.");
SDL_Texture *tex = SDL_CreateTextureFromSurface(r,surf);
@@ -2735,7 +2746,7 @@ JSC_CCALL(renderer_load_texture,
)
JSC_CCALL(renderer_get_image,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
SDL_Surface *surf = NULL;
if (!JS_IsUndefined(argv[0])) {
rect rect = js2rect(js,argv[0]);
@@ -2747,7 +2758,7 @@ JSC_CCALL(renderer_get_image,
)
JSC_CCALL(renderer_line,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
if (JS_IsArray(js,argv[0])) {
int len = js_arrlen(js,argv[0]);
@@ -2763,7 +2774,7 @@ JSC_CCALL(renderer_line,
)
JSC_CCALL(renderer_point,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
if (JS_IsArray(js,argv[0])) {
int len = js_arrlen(js,argv[0]);
@@ -2811,7 +2822,7 @@ void Translate2DPoints(HMM_Vec2 *points, int count, HMM_Vec3 position, HMM_Quat
// Should take a single struct with pos, color, uv, and indices arrays
JSC_CCALL(renderer_geometry,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
JSValue pos = JS_GetPropertyStr(js,argv[1], "pos");
JSValue color = JS_GetPropertyStr(js,argv[1], "color");
JSValue uv = JS_GetPropertyStr(js,argv[1], "uv");
@@ -2845,13 +2856,13 @@ JSC_CCALL(renderer_geometry,
)
JSC_CCALL(renderer_logical_size,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
HMM_Vec2 v = js2vec2(js,argv[0]);
SDL_SetRenderLogicalPresentation(r,v.x,v.y,SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
)
JSC_CCALL(renderer_viewport,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
if (JS_IsUndefined(argv[0]))
SDL_SetRenderViewport(r,NULL);
else {
@@ -2861,7 +2872,7 @@ JSC_CCALL(renderer_viewport,
)
JSC_CCALL(renderer_clip,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
if (JS_IsUndefined(argv[0]))
SDL_SetRenderClipRect(r,NULL);
else {
@@ -2871,19 +2882,19 @@ JSC_CCALL(renderer_clip,
)
JSC_CCALL(renderer_scale,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
HMM_Vec2 v = js2vec2(js,argv[0]);
SDL_SetRenderScale(r, v.x, v.y);
)
JSC_CCALL(renderer_vsync,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
return JS_NewBool(js, SDL_SetRenderVSync(r,js2number(js,argv[0])));
)
// This returns the coordinates inside the
JSC_CCALL(renderer_coords,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
HMM_Vec2 pos, coord;
pos = js2vec2(js,argv[0]);
SDL_RenderCoordinatesFromWindow(r,pos.x,pos.y, &coord.x, &coord.y);
@@ -2891,9 +2902,12 @@ JSC_CCALL(renderer_coords,
)
JSC_CCALL(renderer_camera,
int centered = JS_ToBool(js,argv[1]);
SDL_Renderer *ren = js2SDL_Renderer(js,self);
SDL_Renderer *ren = js2renderer_ctx(js,self)->sdl;
JSValue camera = argv[0];
SDL_Rect vp;
int centered = JS_ToBool(js,argv[1]);
SDL_GetRenderViewport(ren, &vp);
HMM_Mat3 proj;
proj.Columns[0] = (HMM_Vec3){1,0,0};
@@ -2918,7 +2932,7 @@ JSC_CCALL(renderer_screen2world,
)
JSC_CCALL(renderer_target,
SDL_Renderer *r = js2SDL_Renderer(js,self);
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
if (JS_IsUndefined(argv[0]))
SDL_SetRenderTarget(r, NULL);
else {
@@ -2990,7 +3004,7 @@ JSC_CCALL(renderer_make_sprite_mesh,
JS_SetProperty(js, ret, count, number2js(js, count));
)
static const JSCFunctionListEntry js_SDL_Renderer_funcs[] = {
static const JSCFunctionListEntry js_renderer_ctx_funcs[] = {
MIST_FUNC_DEF(SDL_Renderer, draw_color, 1),
MIST_FUNC_DEF(SDL_Renderer, present, 0),
MIST_FUNC_DEF(SDL_Renderer, clear, 0),
@@ -7060,7 +7074,7 @@ void ffi_load(JSContext *js)
QJSCLASSPREP_NO_FUNCS(SDL_Cursor)
QJSCLASSPREP_FUNCS(SDL_Camera)
QJSCLASSPREP_FUNCS(SDL_Renderer)
QJSCLASSPREP_FUNCS(renderer_ctx)
QJSCLASSPREP_FUNCS(SDL_GPUDevice)
QJSCLASSPREP_FUNCS(SDL_GPUTexture)

View File

@@ -1,15 +1,41 @@
var render = use('sdl_render')
console.log("HERE")
render.initialize({})
var os = use('os')
var draw2d = use('draw2d')
render.initialize({
width:500,
height:500,
resolution_x:500,
resolution_y:500,
mode: "letterboxed"
})
var draw = use('draw2d')
var camera = {
x: 0,
y: 0,
transform: os.make_transform(),
zoom: 1,
surface: undefined,
viewport: {x:0,y:0,width:1,height:1}
}
var hudcam = {
x: 0,
y: 0,
mode: 'ortho',
viewport: {x:0,y:0,width:1,height:1},
surface:undefined,
}
$_.delay($_.stop, 3)
function loop()
{
render.clear()
draw.rectangle({x:50,y:-50,width:50,height:50})
render.present()
$_.delay(loop, 1/60)
}
loop()