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 render = {}
|
||||||
|
|
||||||
var graphics = use('graphics')
|
|
||||||
|
|
||||||
var context
|
var context
|
||||||
|
|
||||||
render.initialize = function(config)
|
render.initialize = function(config)
|
||||||
@@ -10,7 +8,7 @@ render.initialize = function(config)
|
|||||||
title:`Prosperon [${prosperon.version}-${prosperon.revision}]`,
|
title:`Prosperon [${prosperon.version}-${prosperon.revision}]`,
|
||||||
width: 1280,
|
width: 1280,
|
||||||
height: 720,
|
height: 720,
|
||||||
icon: graphics.make_texture(io.slurpbytes('icons/moon.gif')),
|
// icon: graphics.make_texture(io.slurpbytes('icons/moon.gif')),
|
||||||
high_dpi:0,
|
high_dpi:0,
|
||||||
alpha:1,
|
alpha:1,
|
||||||
fullscreen:0,
|
fullscreen:0,
|
||||||
@@ -32,7 +30,8 @@ render.initialize = function(config)
|
|||||||
// config[i] ??= default_conf[i]
|
// config[i] ??= default_conf[i]
|
||||||
|
|
||||||
prosperon.window = prosperon.engine_start({width:500,height:500})
|
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
|
// img here is the engine surface
|
||||||
@@ -84,4 +83,14 @@ render.get_image = function(rect)
|
|||||||
return context.get_image(rect)
|
return context.get_image(rect)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render.clear = function()
|
||||||
|
{
|
||||||
|
context.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
render.present = function()
|
||||||
|
{
|
||||||
|
context.present()
|
||||||
|
}
|
||||||
|
|
||||||
return render
|
return render
|
||||||
|
|||||||
@@ -1014,9 +1014,15 @@ void SDL_Window_free(JSRuntime *rt, SDL_Window *w)
|
|||||||
SDL_DestroyWindow(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) {
|
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_GPUComputePass_free(JSRuntime *rt, SDL_GPUComputePass *c) { }
|
||||||
void SDL_GPUCopyPass_free(JSRuntime *rt, SDL_GPUCopyPass *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_SetNumberProperty(props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0);
|
||||||
SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, win);
|
SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, win);
|
||||||
SDL_SetStringProperty(props, SDL_PROP_RENDERER_CREATE_NAME_STRING, str);
|
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);
|
SDL_DestroyProperties(props);
|
||||||
if (!r) return JS_ThrowReferenceError(js, "Error creating renderer: %s",SDL_GetError());
|
if (!ctx->sdl) {
|
||||||
SDL_SetRenderDrawBlendMode(r, SDL_BLENDMODE_BLEND);
|
free(ctx);
|
||||||
return SDL_Renderer2js(js,r);
|
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)
|
SDL_GPUShaderFormat js2SDL_GPUShaderFormat(JSContext *js, JSValue v)
|
||||||
@@ -2694,17 +2705,17 @@ static const JSCFunctionListEntry js_SDL_Window_funcs[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
JSC_CCALL(SDL_Renderer_clear,
|
JSC_CCALL(SDL_Renderer_clear,
|
||||||
SDL_Renderer *renderer = js2SDL_Renderer(js,self);
|
SDL_Renderer *renderer = js2renderer_ctx(js,self)->sdl;
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(SDL_Renderer_present,
|
JSC_CCALL(SDL_Renderer_present,
|
||||||
SDL_Renderer *ren = js2SDL_Renderer(js,self);
|
SDL_Renderer *ren = js2renderer_ctx(js,self)->sdl;
|
||||||
SDL_RenderPresent(ren);
|
SDL_RenderPresent(ren);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(SDL_Renderer_draw_color,
|
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]);
|
colorf color = js2color(js,argv[0]);
|
||||||
SDL_SetRenderDrawColorFloat(renderer, color.r,color.g,color.b,color.a);
|
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,
|
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]);
|
SDL_Surface *surf = js2SDL_Surface(js,argv[0]);
|
||||||
if (!surf) return JS_ThrowReferenceError(js, "Surface was not a surface.");
|
if (!surf) return JS_ThrowReferenceError(js, "Surface was not a surface.");
|
||||||
SDL_Texture *tex = SDL_CreateTextureFromSurface(r,surf);
|
SDL_Texture *tex = SDL_CreateTextureFromSurface(r,surf);
|
||||||
@@ -2735,7 +2746,7 @@ JSC_CCALL(renderer_load_texture,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_get_image,
|
JSC_CCALL(renderer_get_image,
|
||||||
SDL_Renderer *r = js2SDL_Renderer(js,self);
|
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
|
||||||
SDL_Surface *surf = NULL;
|
SDL_Surface *surf = NULL;
|
||||||
if (!JS_IsUndefined(argv[0])) {
|
if (!JS_IsUndefined(argv[0])) {
|
||||||
rect rect = js2rect(js,argv[0]);
|
rect rect = js2rect(js,argv[0]);
|
||||||
@@ -2747,7 +2758,7 @@ JSC_CCALL(renderer_get_image,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_line,
|
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])) {
|
if (JS_IsArray(js,argv[0])) {
|
||||||
int len = js_arrlen(js,argv[0]);
|
int len = js_arrlen(js,argv[0]);
|
||||||
@@ -2763,7 +2774,7 @@ JSC_CCALL(renderer_line,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_point,
|
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])) {
|
if (JS_IsArray(js,argv[0])) {
|
||||||
int len = js_arrlen(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
|
// Should take a single struct with pos, color, uv, and indices arrays
|
||||||
JSC_CCALL(renderer_geometry,
|
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 pos = JS_GetPropertyStr(js,argv[1], "pos");
|
||||||
JSValue color = JS_GetPropertyStr(js,argv[1], "color");
|
JSValue color = JS_GetPropertyStr(js,argv[1], "color");
|
||||||
JSValue uv = JS_GetPropertyStr(js,argv[1], "uv");
|
JSValue uv = JS_GetPropertyStr(js,argv[1], "uv");
|
||||||
@@ -2845,13 +2856,13 @@ JSC_CCALL(renderer_geometry,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_logical_size,
|
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]);
|
HMM_Vec2 v = js2vec2(js,argv[0]);
|
||||||
SDL_SetRenderLogicalPresentation(r,v.x,v.y,SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
|
SDL_SetRenderLogicalPresentation(r,v.x,v.y,SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_viewport,
|
JSC_CCALL(renderer_viewport,
|
||||||
SDL_Renderer *r = js2SDL_Renderer(js,self);
|
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
|
||||||
if (JS_IsUndefined(argv[0]))
|
if (JS_IsUndefined(argv[0]))
|
||||||
SDL_SetRenderViewport(r,NULL);
|
SDL_SetRenderViewport(r,NULL);
|
||||||
else {
|
else {
|
||||||
@@ -2861,7 +2872,7 @@ JSC_CCALL(renderer_viewport,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_clip,
|
JSC_CCALL(renderer_clip,
|
||||||
SDL_Renderer *r = js2SDL_Renderer(js,self);
|
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
|
||||||
if (JS_IsUndefined(argv[0]))
|
if (JS_IsUndefined(argv[0]))
|
||||||
SDL_SetRenderClipRect(r,NULL);
|
SDL_SetRenderClipRect(r,NULL);
|
||||||
else {
|
else {
|
||||||
@@ -2871,19 +2882,19 @@ JSC_CCALL(renderer_clip,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_scale,
|
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]);
|
HMM_Vec2 v = js2vec2(js,argv[0]);
|
||||||
SDL_SetRenderScale(r, v.x, v.y);
|
SDL_SetRenderScale(r, v.x, v.y);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_vsync,
|
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])));
|
return JS_NewBool(js, SDL_SetRenderVSync(r,js2number(js,argv[0])));
|
||||||
)
|
)
|
||||||
|
|
||||||
// This returns the coordinates inside the
|
// This returns the coordinates inside the
|
||||||
JSC_CCALL(renderer_coords,
|
JSC_CCALL(renderer_coords,
|
||||||
SDL_Renderer *r = js2SDL_Renderer(js,self);
|
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
|
||||||
HMM_Vec2 pos, coord;
|
HMM_Vec2 pos, coord;
|
||||||
pos = js2vec2(js,argv[0]);
|
pos = js2vec2(js,argv[0]);
|
||||||
SDL_RenderCoordinatesFromWindow(r,pos.x,pos.y, &coord.x, &coord.y);
|
SDL_RenderCoordinatesFromWindow(r,pos.x,pos.y, &coord.x, &coord.y);
|
||||||
@@ -2891,9 +2902,12 @@ JSC_CCALL(renderer_coords,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_camera,
|
JSC_CCALL(renderer_camera,
|
||||||
int centered = JS_ToBool(js,argv[1]);
|
SDL_Renderer *ren = js2renderer_ctx(js,self)->sdl;
|
||||||
SDL_Renderer *ren = js2SDL_Renderer(js,self);
|
JSValue camera = argv[0];
|
||||||
|
|
||||||
SDL_Rect vp;
|
SDL_Rect vp;
|
||||||
|
|
||||||
|
int centered = JS_ToBool(js,argv[1]);
|
||||||
SDL_GetRenderViewport(ren, &vp);
|
SDL_GetRenderViewport(ren, &vp);
|
||||||
HMM_Mat3 proj;
|
HMM_Mat3 proj;
|
||||||
proj.Columns[0] = (HMM_Vec3){1,0,0};
|
proj.Columns[0] = (HMM_Vec3){1,0,0};
|
||||||
@@ -2918,7 +2932,7 @@ JSC_CCALL(renderer_screen2world,
|
|||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(renderer_target,
|
JSC_CCALL(renderer_target,
|
||||||
SDL_Renderer *r = js2SDL_Renderer(js,self);
|
SDL_Renderer *r = js2renderer_ctx(js,self)->sdl;
|
||||||
if (JS_IsUndefined(argv[0]))
|
if (JS_IsUndefined(argv[0]))
|
||||||
SDL_SetRenderTarget(r, NULL);
|
SDL_SetRenderTarget(r, NULL);
|
||||||
else {
|
else {
|
||||||
@@ -2990,7 +3004,7 @@ JSC_CCALL(renderer_make_sprite_mesh,
|
|||||||
JS_SetProperty(js, ret, count, number2js(js, count));
|
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, draw_color, 1),
|
||||||
MIST_FUNC_DEF(SDL_Renderer, present, 0),
|
MIST_FUNC_DEF(SDL_Renderer, present, 0),
|
||||||
MIST_FUNC_DEF(SDL_Renderer, clear, 0),
|
MIST_FUNC_DEF(SDL_Renderer, clear, 0),
|
||||||
@@ -7060,7 +7074,7 @@ void ffi_load(JSContext *js)
|
|||||||
QJSCLASSPREP_NO_FUNCS(SDL_Cursor)
|
QJSCLASSPREP_NO_FUNCS(SDL_Cursor)
|
||||||
QJSCLASSPREP_FUNCS(SDL_Camera)
|
QJSCLASSPREP_FUNCS(SDL_Camera)
|
||||||
|
|
||||||
QJSCLASSPREP_FUNCS(SDL_Renderer)
|
QJSCLASSPREP_FUNCS(renderer_ctx)
|
||||||
|
|
||||||
QJSCLASSPREP_FUNCS(SDL_GPUDevice)
|
QJSCLASSPREP_FUNCS(SDL_GPUDevice)
|
||||||
QJSCLASSPREP_FUNCS(SDL_GPUTexture)
|
QJSCLASSPREP_FUNCS(SDL_GPUTexture)
|
||||||
|
|||||||
@@ -1,15 +1,41 @@
|
|||||||
var render = use('sdl_render')
|
var render = use('sdl_render')
|
||||||
console.log("HERE")
|
var os = use('os')
|
||||||
render.initialize({})
|
|
||||||
|
|
||||||
var draw2d = use('draw2d')
|
render.initialize({
|
||||||
|
width:500,
|
||||||
|
height:500,
|
||||||
|
resolution_x:500,
|
||||||
|
resolution_y:500,
|
||||||
|
mode: "letterboxed"
|
||||||
|
})
|
||||||
|
|
||||||
|
var draw = use('draw2d')
|
||||||
|
|
||||||
var camera = {
|
var camera = {
|
||||||
x: 0,
|
transform: os.make_transform(),
|
||||||
y: 0,
|
|
||||||
zoom: 1,
|
zoom: 1,
|
||||||
surface: undefined,
|
surface: undefined,
|
||||||
viewport: {x:0,y:0,width:1,height:1}
|
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)
|
$_.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