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
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user