fix texture color issue on macos

This commit is contained in:
2025-01-11 21:07:48 -06:00
parent 034ef8ac94
commit 58cf983e5e
3 changed files with 55 additions and 38 deletions

View File

@@ -242,6 +242,13 @@ Cmdline.register_order(
prosperon.max_dropped_files=1;
prosperon.swap_interval = 1;
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");
else console.warn("No config.js file found. Starting with default parameters.");

View File

@@ -5,6 +5,9 @@
float4 main(PSInput input) : SV_TARGET
{
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;
}

View File

@@ -2203,12 +2203,29 @@ static const JSCFunctionListEntry js_array_funcs[] = {
PROTO_FUNC_DEF(array, lerp, 2)
};
#define JS_SDL_PROP(JS, VAL, SDLPROP, PROP) \
{ \
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); \
} \
JSC_SCALL(game_engine_start,
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());
const char *title = JS_ToCString(js,js_getpropertystr(js,argv[0], "title"));
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);
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());
@@ -3433,15 +3450,10 @@ SDL_GPUTextureFormat chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
switch (sfmt) {
case SDL_PIXELFORMAT_RGBA32:
case SDL_PIXELFORMAT_ABGR32:
case SDL_PIXELFORMAT_ARGB32:
case SDL_PIXELFORMAT_BGRA32:
case SDL_PIXELFORMAT_RGBX8888:
case SDL_PIXELFORMAT_XRGB8888:
case SDL_PIXELFORMAT_BGRX8888:
case SDL_PIXELFORMAT_XBGR8888:
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
break;
case SDL_PIXELFORMAT_RGBA4444:
case SDL_PIXELFORMAT_ABGR4444:
@@ -3466,9 +3478,9 @@ switch (sfmt) {
break;
default:
surf = SDL_ConvertSurface(surf, SDL_PIXELFORMAT_RGBA8888);
surf = SDL_ConvertSurface(surf, SDL_PIXELFORMAT_RGBA32);
dofree = 1;
sfmt = SDL_PIXELFORMAT_RGBA8888;
sfmt = SDL_PIXELFORMAT_RGBA32;
pdetails = SDL_GetPixelFormatDetails(sfmt);
chosen_format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
has_alpha = true;
@@ -3569,25 +3581,25 @@ if (compress) {
upload_data = compressed_data;
upload_size = blocks_count * block_size;
} else {
} else {
// No compression, upload directly
upload_data = (unsigned char*)pixel_data;
upload_size = pixel_data_size;
}
}
SDL_GPUTransferBuffer *tex_buffer = SDL_CreateGPUTransferBuffer(
SDL_GPUTransferBuffer *tex_buffer = SDL_CreateGPUTransferBuffer(
gpu,
&(SDL_GPUTransferBufferCreateInfo) {
.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD,
.size = upload_size
});
void *tex_ptr = SDL_MapGPUTransferBuffer(gpu, tex_buffer, false);
memcpy(tex_ptr, upload_data, upload_size);
SDL_UnmapGPUTransferBuffer(gpu, tex_buffer);
void *tex_ptr = SDL_MapGPUTransferBuffer(gpu, tex_buffer, false);
memcpy(tex_ptr, upload_data, upload_size);
SDL_UnmapGPUTransferBuffer(gpu, tex_buffer);
SDL_GPUCommandBuffer *uploadcmd = SDL_AcquireGPUCommandBuffer(gpu);
SDL_GPUCopyPass *copypass = SDL_BeginGPUCopyPass(uploadcmd);
SDL_UploadToGPUTexture(
SDL_GPUCommandBuffer *uploadcmd = SDL_AcquireGPUCommandBuffer(gpu);
SDL_GPUCopyPass *copypass = SDL_BeginGPUCopyPass(uploadcmd);
SDL_UploadToGPUTexture(
copypass,
&(SDL_GPUTextureTransferInfo) {
.transfer_buffer = tex_buffer,
@@ -3602,22 +3614,19 @@ SDL_UploadToGPUTexture(
false
);
SDL_EndGPUCopyPass(copypass);
SDL_SubmitGPUCommandBuffer(uploadcmd);
SDL_ReleaseGPUTransferBuffer(gpu, tex_buffer);
SDL_EndGPUCopyPass(copypass);
SDL_SubmitGPUCommandBuffer(uploadcmd);
SDL_ReleaseGPUTransferBuffer(gpu, tex_buffer);
if (compress) {
if (compress) {
free(upload_data);
}
}
ret = SDL_GPUTexture2js(js, tex);
JS_SetProperty(js, ret, width_atom, number2js(js, surf->w));
JS_SetProperty(js, ret, height_atom, number2js(js, surf->h));
ret = SDL_GPUTexture2js(js, tex);
JS_SetProperty(js, ret, width_atom, number2js(js, surf->w));
JS_SetProperty(js, ret, height_atom, number2js(js, surf->h));
if (dofree) SDL_DestroySurface(surf);
)
JSC_CCALL(gpu_logical_size,
if (dofree) SDL_DestroySurface(surf);
)
@@ -4307,9 +4316,7 @@ static const JSCFunctionListEntry js_SDL_GPUDevice_funcs[] = {
MIST_FUNC_DEF(gpu, set_swapchain, 2),
MIST_FUNC_DEF(gpu, make_sampler,1),
MIST_FUNC_DEF(gpu, load_texture, 2),
MIST_FUNC_DEF(gpu, logical_size, 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_quad, 0),
MIST_FUNC_DEF(gpu, driver, 0),