fix texture color issue on macos
This commit is contained in:
@@ -242,6 +242,13 @@ Cmdline.register_order(
|
|||||||
prosperon.max_dropped_files=1;
|
prosperon.max_dropped_files=1;
|
||||||
prosperon.swap_interval = 1;
|
prosperon.swap_interval = 1;
|
||||||
prosperon.title = "Prosperon";
|
prosperon.title = "Prosperon";
|
||||||
|
prosperon.name = prosperon.title;
|
||||||
|
prosperon.version = "432r23a";
|
||||||
|
prosperon.identifier = "world.pockle.prosperon";
|
||||||
|
prosperon.creator = "Pockle World LLC"
|
||||||
|
prosperon.copyright = "Copyright Pockle World 2025"
|
||||||
|
prosperon.type = "application"
|
||||||
|
prosperon.url = "https://github.com/johnbrethauer/prosperon"
|
||||||
|
|
||||||
if (io.exists("config.js")) global.mixin("config.js");
|
if (io.exists("config.js")) global.mixin("config.js");
|
||||||
else console.warn("No config.js file found. Starting with default parameters.");
|
else console.warn("No config.js file found. Starting with default parameters.");
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
float4 main(PSInput input) : SV_TARGET
|
float4 main(PSInput input) : SV_TARGET
|
||||||
{
|
{
|
||||||
float4 color = input.color;
|
float4 color = input.color;
|
||||||
color.a = abs(sdf.circle(input.uv, 1)) <= 0.05 ? 1:0 ;
|
float2 p = input.uv;
|
||||||
|
p -= 0.5;
|
||||||
|
p *= 2;
|
||||||
|
color.a = abs(sdf.circle(p, 1)) <= 0.005 ? 1:0 ;
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
@@ -2203,12 +2203,29 @@ static const JSCFunctionListEntry js_array_funcs[] = {
|
|||||||
PROTO_FUNC_DEF(array, lerp, 2)
|
PROTO_FUNC_DEF(array, lerp, 2)
|
||||||
};
|
};
|
||||||
|
|
||||||
JSC_SCALL(game_engine_start,
|
#define JS_SDL_PROP(JS, VAL, SDLPROP, PROP) \
|
||||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_CAMERA) < 0)
|
{ \
|
||||||
return JS_ThrowReferenceError(js, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
JSValue v = JS_GetPropertyStr(JS,VAL,#PROP); \
|
||||||
|
const char *str = JS_ToCString(JS, v); \
|
||||||
|
SDL_SetAppMetadataProperty(SDLPROP, str); \
|
||||||
|
JS_FreeCString(JS,str); \
|
||||||
|
JS_FreeValue(js,v); \
|
||||||
|
} \
|
||||||
|
|
||||||
const char *title = JS_ToCString(js,js_getpropertystr(js,argv[0], "title"));
|
JSC_SCALL(game_engine_start,
|
||||||
SDL_Window *new = SDL_CreateWindow(title, js2number(js, js_getproperty(js,argv[0], width_atom)), js2number(js,js_getproperty(js,argv[0], height_atom)), SDL_WINDOW_RESIZABLE);
|
JSValue p = argv[0];
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_NAME_STRING, name)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_VERSION_STRING, version)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_IDENTIFIER_STRING, identifier)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_CREATOR_STRING, creator)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_COPYRIGHT_STRING, copyright)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_URL_STRING, url)
|
||||||
|
JS_SDL_PROP(js, p, SDL_PROP_APP_METADATA_TYPE_STRING, type)
|
||||||
|
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_CAMERA) < 0)
|
||||||
|
return JS_ThrowReferenceError(js, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||||
|
|
||||||
|
SDL_Window *new = SDL_CreateWindow("prosperon", js2number(js, js_getproperty(js,argv[0], width_atom)), js2number(js,js_getproperty(js,argv[0], height_atom)), SDL_WINDOW_RESIZABLE);
|
||||||
|
|
||||||
if (!new) return JS_ThrowReferenceError(js, "Couldn't open window: %s\n", SDL_GetError());
|
if (!new) return JS_ThrowReferenceError(js, "Couldn't open window: %s\n", SDL_GetError());
|
||||||
|
|
||||||
@@ -3433,15 +3450,10 @@ SDL_GPUTextureFormat chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
|
|||||||
|
|
||||||
switch (sfmt) {
|
switch (sfmt) {
|
||||||
case SDL_PIXELFORMAT_RGBA32:
|
case SDL_PIXELFORMAT_RGBA32:
|
||||||
case SDL_PIXELFORMAT_ABGR32:
|
|
||||||
case SDL_PIXELFORMAT_ARGB32:
|
|
||||||
case SDL_PIXELFORMAT_BGRA32:
|
|
||||||
case SDL_PIXELFORMAT_RGBX8888:
|
case SDL_PIXELFORMAT_RGBX8888:
|
||||||
case SDL_PIXELFORMAT_XRGB8888:
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
case SDL_PIXELFORMAT_BGRX8888:
|
|
||||||
case SDL_PIXELFORMAT_XBGR8888:
|
case SDL_PIXELFORMAT_XBGR8888:
|
||||||
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
|
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_PIXELFORMAT_RGBA4444:
|
case SDL_PIXELFORMAT_RGBA4444:
|
||||||
case SDL_PIXELFORMAT_ABGR4444:
|
case SDL_PIXELFORMAT_ABGR4444:
|
||||||
@@ -3466,9 +3478,9 @@ switch (sfmt) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
surf = SDL_ConvertSurface(surf, SDL_PIXELFORMAT_RGBA8888);
|
surf = SDL_ConvertSurface(surf, SDL_PIXELFORMAT_RGBA32);
|
||||||
dofree = 1;
|
dofree = 1;
|
||||||
sfmt = SDL_PIXELFORMAT_RGBA8888;
|
sfmt = SDL_PIXELFORMAT_RGBA32;
|
||||||
pdetails = SDL_GetPixelFormatDetails(sfmt);
|
pdetails = SDL_GetPixelFormatDetails(sfmt);
|
||||||
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
|
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
|
||||||
has_alpha = true;
|
has_alpha = true;
|
||||||
@@ -3569,25 +3581,25 @@ if (compress) {
|
|||||||
|
|
||||||
upload_data = compressed_data;
|
upload_data = compressed_data;
|
||||||
upload_size = blocks_count * block_size;
|
upload_size = blocks_count * block_size;
|
||||||
} else {
|
} else {
|
||||||
// No compression, upload directly
|
// No compression, upload directly
|
||||||
upload_data = (unsigned char*)pixel_data;
|
upload_data = (unsigned char*)pixel_data;
|
||||||
upload_size = pixel_data_size;
|
upload_size = pixel_data_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_GPUTransferBuffer *tex_buffer = SDL_CreateGPUTransferBuffer(
|
SDL_GPUTransferBuffer *tex_buffer = SDL_CreateGPUTransferBuffer(
|
||||||
gpu,
|
gpu,
|
||||||
&(SDL_GPUTransferBufferCreateInfo) {
|
&(SDL_GPUTransferBufferCreateInfo) {
|
||||||
.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD,
|
.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD,
|
||||||
.size = upload_size
|
.size = upload_size
|
||||||
});
|
});
|
||||||
void *tex_ptr = SDL_MapGPUTransferBuffer(gpu, tex_buffer, false);
|
void *tex_ptr = SDL_MapGPUTransferBuffer(gpu, tex_buffer, false);
|
||||||
memcpy(tex_ptr, upload_data, upload_size);
|
memcpy(tex_ptr, upload_data, upload_size);
|
||||||
SDL_UnmapGPUTransferBuffer(gpu, tex_buffer);
|
SDL_UnmapGPUTransferBuffer(gpu, tex_buffer);
|
||||||
|
|
||||||
SDL_GPUCommandBuffer *uploadcmd = SDL_AcquireGPUCommandBuffer(gpu);
|
SDL_GPUCommandBuffer *uploadcmd = SDL_AcquireGPUCommandBuffer(gpu);
|
||||||
SDL_GPUCopyPass *copypass = SDL_BeginGPUCopyPass(uploadcmd);
|
SDL_GPUCopyPass *copypass = SDL_BeginGPUCopyPass(uploadcmd);
|
||||||
SDL_UploadToGPUTexture(
|
SDL_UploadToGPUTexture(
|
||||||
copypass,
|
copypass,
|
||||||
&(SDL_GPUTextureTransferInfo) {
|
&(SDL_GPUTextureTransferInfo) {
|
||||||
.transfer_buffer = tex_buffer,
|
.transfer_buffer = tex_buffer,
|
||||||
@@ -3602,23 +3614,20 @@ SDL_UploadToGPUTexture(
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
SDL_EndGPUCopyPass(copypass);
|
SDL_EndGPUCopyPass(copypass);
|
||||||
SDL_SubmitGPUCommandBuffer(uploadcmd);
|
SDL_SubmitGPUCommandBuffer(uploadcmd);
|
||||||
SDL_ReleaseGPUTransferBuffer(gpu, tex_buffer);
|
SDL_ReleaseGPUTransferBuffer(gpu, tex_buffer);
|
||||||
|
|
||||||
if (compress) {
|
if (compress) {
|
||||||
free(upload_data);
|
free(upload_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = SDL_GPUTexture2js(js, tex);
|
ret = SDL_GPUTexture2js(js, tex);
|
||||||
JS_SetProperty(js, ret, width_atom, number2js(js, surf->w));
|
JS_SetProperty(js, ret, width_atom, number2js(js, surf->w));
|
||||||
JS_SetProperty(js, ret, height_atom, number2js(js, surf->h));
|
JS_SetProperty(js, ret, height_atom, number2js(js, surf->h));
|
||||||
|
|
||||||
if (dofree) SDL_DestroySurface(surf);
|
if (dofree) SDL_DestroySurface(surf);
|
||||||
)
|
|
||||||
|
|
||||||
JSC_CCALL(gpu_logical_size,
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
static JSValue js_gpu_make_pipeline(JSContext *js, JSValueConst self, int argc, JSValueConst *argv) {
|
static JSValue js_gpu_make_pipeline(JSContext *js, JSValueConst self, int argc, JSValueConst *argv) {
|
||||||
@@ -4307,9 +4316,7 @@ static const JSCFunctionListEntry js_SDL_GPUDevice_funcs[] = {
|
|||||||
MIST_FUNC_DEF(gpu, set_swapchain, 2),
|
MIST_FUNC_DEF(gpu, set_swapchain, 2),
|
||||||
MIST_FUNC_DEF(gpu, make_sampler,1),
|
MIST_FUNC_DEF(gpu, make_sampler,1),
|
||||||
MIST_FUNC_DEF(gpu, load_texture, 2),
|
MIST_FUNC_DEF(gpu, load_texture, 2),
|
||||||
MIST_FUNC_DEF(gpu, logical_size, 1),
|
|
||||||
MIST_FUNC_DEF(gpu, texture, 1),
|
MIST_FUNC_DEF(gpu, texture, 1),
|
||||||
// MIST_FUNC_DEF(gpu, geometry, 2),
|
|
||||||
MIST_FUNC_DEF(gpu, make_sprite_mesh, 2),
|
MIST_FUNC_DEF(gpu, make_sprite_mesh, 2),
|
||||||
MIST_FUNC_DEF(gpu, make_quad, 0),
|
MIST_FUNC_DEF(gpu, make_quad, 0),
|
||||||
MIST_FUNC_DEF(gpu, driver, 0),
|
MIST_FUNC_DEF(gpu, driver, 0),
|
||||||
|
|||||||
Reference in New Issue
Block a user