SwitchGame/source/squirrel/sqr_sdl.hpp

146 lines
4.6 KiB
C++
Raw Normal View History

2025-09-19 12:18:57 +08:00
// #pragma once
// #include <string>
// #include <squirrel.h> // Squirrel核心头文件
// #include <sqstdio.h> // Squirrel标准IO库
// #include <sqstdaux.h> // 新增:包含 sqstd_seterrorhandlers 等辅助函数
// #include <sqstdblob.h> // 新增:包含 sqstd_register_bloblib 函数
// #include <sqstdsystem.h> // 新增:包含 sqstd_register_systemlib 函数
// #include <sqstdmath.h> // 新增:包含 sqstd_register_mathlib 函数
// #include <sqstdstring.h> // 新增:包含 sqstd_register_stringlib 函数
// #include "EngineCore/Asset_ImagePack.h"
// #include "EngineCore/Game.h"
// #include <SDL2/SDL.h>
// #include <SDL2/SDL_image.h>
// #include <SDL2/SDL_ttf.h>
// // 辅助函数检查SDL错误并抛出Squirrel异常
// static void checkSDLError(HSQUIRRELVM v)
// {
// const char *err = SDL_GetError();
// if (err && *err)
// {
// sq_throwerror(v, err);
// SDL_ClearError();
// }
// }
// // SDL_GetTicks 绑定
// static SQInteger sdl_GetTicks(HSQUIRRELVM v)
// {
// sq_pushinteger(v, SDL_GetTicks());
// return 1;
// }
// static SQInteger sdl_CreateTexture(HSQUIRRELVM v)
// {
// const SQChar *imgPath;
// SQInteger Index;
// sq_getstring(v, 2, &imgPath);
// sq_getinteger(v, 3, &Index);
// Asset_ImagePack::IMG *Info = Asset_ImagePack::GetInstance().GetIMG(imgPath);
// Asset_ImagePack::ImgInfo &Buf = Info->lp_lplist[Index];
// SDL_Texture *m_texture = SDL_CreateTexture(
// Game::GetInstance().GetRenderer(),
// SDL_PIXELFORMAT_ARGB8888, // 匹配RGBA数据格式
// SDL_TEXTUREACCESS_STREAMING,
// Buf.Width, Buf.Height);
// int pitch = Buf.Width * 4;
// SDL_UpdateTexture(m_texture, NULL, Buf.PNGdata, pitch);
// sq_pushuserpointer(v, m_texture);
// return 1;
// }
// static SQInteger sdl_DrawImg(HSQUIRRELVM v)
// {
// SQUserPointer m_texture;
// SQInteger PosX, PosY, Width, Height;
// sq_getuserpointer(v, 2, &m_texture);
// sq_getinteger(v, 3, &PosX);
// sq_getinteger(v, 4, &PosY);
// sq_getinteger(v, 5, &Width);
// sq_getinteger(v, 6, &Height);
// SDL_Rect Rect = {(int)PosX, (int)PosY, (int)Width, (int)Height};
// SDL_RenderCopy(Game::GetInstance().GetRenderer(), (SDL_Texture *)m_texture, NULL, &Rect);
// return 0;
// }
// static SQInteger sdl_DrawImgEx(HSQUIRRELVM v)
// {
// const SQChar *imgPath;
// SQInteger Index, PosX, PosY, BlendMode;
// SQFloat Rotate;
// sq_getstring(v, 2, &imgPath);
// sq_getinteger(v, 3, &Index);
// sq_getinteger(v, 4, &PosX);
// sq_getinteger(v, 5, &PosY);
// sq_getinteger(v, 6, &BlendMode);
// sq_getfloat(v, 7, &Rotate);
// Asset_ImagePack::IMG *Info = Asset_ImagePack::GetInstance().GetIMG(imgPath);
// Asset_ImagePack::ImgInfo &Buf = Info->lp_lplist[Index];
// SDL_Point pivotPoint = {
// (int)(0.5 * Buf.Width),
// (int)(0.5 * Buf.Height)};
// SDL_Texture *m_texture = SDL_CreateTexture(
// Game::GetInstance().GetRenderer(),
// SDL_PIXELFORMAT_ARGB8888, // 匹配RGBA数据格式
// SDL_TEXTUREACCESS_STREAMING,
// Buf.Width, Buf.Height);
// SDL_SetTextureBlendMode(m_texture, (SDL_BlendMode)BlendMode);
// int pitch = Buf.Width * 4;
// SDL_UpdateTexture(m_texture, NULL, Buf.PNGdata, pitch);
// SDL_Rect Rect = {(int)PosX, (int)PosY, Buf.Width, Buf.Height};
// SDL_RenderCopyEx(Game::GetInstance().GetRenderer(), m_texture, NULL, &Rect, Rotate, &pivotPoint, SDL_FLIP_NONE);
// SDL_DestroyTexture(m_texture);
// return 0;
// }
// void RegisterSDLFunctions(HSQUIRRELVM v)
// {
// // 创建SDL命名空间
// sq_pushstring(v, "SDL", -1);
// sq_newtable(v);
// // 注册SDL函数
// // 获取Ticks函数
// sq_pushstring(v, "GetTicks", -1);
// sq_newclosure(v, sdl_GetTicks, 0);
// sq_setparamscheck(v, 1, NULL);
// sq_rawset(v, -3);
// // 创建纹理
// sq_pushstring(v, "CreateTexture", -1);
// sq_newclosure(v, sdl_CreateTexture, 0);
// // sq_setparamscheck(v, 3, NULL);
// sq_rawset(v, -3);
// // 渲染一个Img
// sq_pushstring(v, "DrawImg", -1);
// sq_newclosure(v, sdl_DrawImg, 0);
// // sq_setparamscheck(v, 5, NULL);
// sq_rawset(v, -3);
// // 渲染一个ImgEx
// sq_pushstring(v, "DrawImgEx", -1);
// sq_newclosure(v, sdl_DrawImgEx, 0);
// sq_rawset(v, -3);
// // 注册SDL常量
// sq_pushstring(v, "RENDERER_ACCELERATED", -1);
// sq_pushinteger(v, SDL_RENDERER_ACCELERATED);
// sq_rawset(v, -3);
// // 将SDL表添加到全局命名空间
// sq_rawset(v, -3);
// }