SDL_GPU 最小化、单头、高性能的 2D 图形绘图库
一个针对 SDL3 的最小化、高性能 2D(g)图形(p)绘图工具。这是 sokol_gp 移植到 SDL3 的版本,主要的区别在于:sokol_gp 依赖于 sokol,后者在内部管理资源。SDL_gpu 的层次较低,不进行资源管理;因此,SDL_gp 提供一个与 sokol 非常相似的简单资源管理系统。示例 元素:矩形:精灵:混合模式:快速入门 如果您想以正确的方式开始,查看示例文件夹。以下是绘制红色矩形的简单示例: // 获取当前帧的命令缓冲区 SDL_GPUCommandBuffer * cmd_buffer = SDL_AcquireGPUCommandBuffer ( device ); // 开始一个新帧 SDL_GPBegin ( WINDOW_WIDTH , WINDOW_HEIGHT ); { // 将屏幕清除为黑色。 SDL_GPSetColor (( SDL_Color ){ 0 , 0 , 0 , 255 }); SDL_GPClear (); // 绘制一个填充的红色矩形。 SDL_GPSetColor (( SDL_Color ){ 255 , 0 , 0 , 255 }); { SDL_GPDrawRectFilled (( SDL_GPRect ){ 10 , 10 , 100 , 100 }); } // 调用者可以渲染到交换链或纹理。这里我们渲染到 // 交换链。 SDL_GPUTexture * swapchain_texture = NULL ; SDL_WaitAndAcquireGPUSwapchainTexture ( cmd_buffer , window , & swapchain_texture , NULL , NULL ); SDL_GPFlush ( cmd_buffer , swapchain_texture ); } SDL_GPEnd (); SDL_SubmitGPUCommandBuffer ( cmd_buffer ); SDL_Delay ( DELTA_TIME_MS ); 快速参考 错误 API: // 获取在 SDL_gp 中发生的最后一个错误。如果没有 // 发生错误,则返回 SDL_GP_ERROR_NONE。 SDL_GP_Error SDL_GPGetLastError ( void ); // 获取描述 SDL_GP_Error 值的人可读字符串。如果错误值 // 未被识别,则返回“未知错误”。 const char * SDL_GPGetErrorMessage ( SDL_GP_Error error ); 图像 API: // 从 SDL_Surface 创建图像。如果创建失败,则返回无效图像, // 使用 SDL_GPGetLastError() 获取有关错误的更多信息。 SDL_GPImage SDL_GPCreateImage ( SDL_Surface * surface ); // 销毁图像并释放其资源。 void SDL_GPDestroyImage ( SDL_GPImage image ); // 获取与图像关联的 GPU 纹理。如果图像无效,则返回 NULL。 SDL_GPUTexture * SDL_GPGetImageGPUTexture ( SDL_GPImage image ); // 获取图像的像素宽度。如果图像无效,则返回 0。 int SDL_GPGetImageWidth ( SDL_GPImage image ); // 获取图像的像素高度。如果图像无效,则返回 0。 int SDL_GPGetImageHeight ( SDL_GPImage image ); 着色器 API: // 从顶点和片段着色器描述创建着色器。如果创建失败, // 则返回无效着色器,使用 SDL_GPGetLastError() 获取有关 // 错误的更多信息。 SDL_GPShader SDL_GPCreateShader ( SDL_GPShaderDesc * desc ); // 获取与 SDL_gp 着色器关联的 SDL 着色器。如果着色器 无效,则返回 NULL。 SDL_GPUShader * SDL_GPGetGPUShader ( SDL_GPShader shader ); // 销毁着色器并释放其资源。 void SDL_GPDestroyShader ( SDL_GPShader shader ); 管道 API: // 创建图形管道,如果创建失败则返回无效管道, // 使用 SDL_GPGetLastError() 获取有关错误的更多信息。 SDL_GPPipeline SDL_GPCreatePipeline ( SDL_GPShader shader_vert , SDL_GPShader shader_frag , SDL_GPPrimitiveType primitive_type , SDL_GPBlendMode blend_mode ); // 销毁图形管道并释放其资源。 void SDL_GPDestroyPipeline ( SDL_GPPipeline pipeline ); // 获取与 SDL_gp 管道关联的 GPU 图形管道。如果管道 无效,则返回 NULL。 SDL_GPUGraphicsPipeline * SDL_GPGetGPUPipeline ( SDL_GPPipeline pipeline ); 绘图者 API: // 设置 SDL_GP 上下文。如果设置失败,则返回 false,使用 // SDL_GPGetLastError() 获取有关错误的更多信息。 bool SDL_GPSetup ( SDL_GPDesc * desc ); // 关闭 SDL_GP 上下文。 void SDL_GPShutdown ( void ); // 开始记录当前帧的绘图调用。这应该在设置 SDL_gp 和 获取当前帧的交换链纹理和命令缓冲区后调用。 // 如果返回 false,则表示发生错误,应跳过该帧, // 使用 SDL_GPGetLastError() 获取有关错误的更多信息。 bool SDL_GPBegin ( int width , int height ); // 将记录的绘图调用刷新到 GPU。如果发生错误, // 返回 false,使用 SDL_GPGetLastError() 获取有关错误的更多信息。 bool SDL_GPFlush ( SDL_GPUCommandBuffer * cmd_buffer , SDL_GPUTexture * texture ); // 结束当前帧的绘图调用记录。 void SDL_GPEnd ( void ); // 在当前视口中设置坐标空间边界。 void SDL_GPSetProjection ( float left , float right , float bottom , float top ); // 将投影重置为默认坐标空间,即当前视口的坐标。 void SDL_GPResetProjection ( void ); // 将当前变换矩阵保存到变换堆栈。稍后用 SDL_GPPopTransform 弹出。 void SDL_GPPushTransform ( void ); // 从变换堆栈顶部恢复变换矩阵。 void SDL_GPPopTransform ( void ); // 设置当前变换矩阵为单位矩阵。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡