refactor: 重构项目结构和资源管理

- 将主程序代码和资源文件移动到Game目录下
- 更新构建脚本以适配新的目录结构
- 重构应用初始化流程,移除冗余代码
- 更新着色器文件路径和资源管理逻辑
- 删除废弃的windows.lua构建脚本
- 优化Switch平台构建配置
This commit is contained in:
2026-03-16 02:45:52 +08:00
parent f8c2c26cdc
commit 092a28c30e
18 changed files with 82 additions and 181 deletions

View File

@@ -0,0 +1,46 @@
# Icon Setup Guide
## Window Icon (运行时窗口图标)
### Windows/Linux
- Place `icon.bmp` (32x32 or larger) in `assets/icons/`
- Set in code: `config.windowConfig.icon = Icon("assets/icons/icon.bmp");`
### Switch
- Place `icon.jpg` (256x256 JPEG) in `assets/icons/icon.jpg`
- Automatically included in NRO build process
## Application Icon (程序文件图标)
### Windows (.exe 图标)
需要创建 `.ico` 文件并放置在 `assets/icons/app.ico`
#### 创建 .ico 文件的方法:
**方法 1: 使用在线工具**
1. 访问 https://icoconvert.com/
2. 上传 PNG/JPG 图标(推荐 256x256
3.将下载的 .ico 文件保存到 `assets/icons/app.ico`
**方法 2: 使用 GIMP**
1. 打开图像
2. 调整为 256x256
3. 文件 → 导出为 → `app.ico`
4. 保存到 `assets/icons/app.ico`
**方法 3: 使用 ImageMagick**
```bash
convert icon.png -define icon:auto-resize=256,128,96,64,48,32,16 app.ico
```
#### Linux (.desktop 图标)
- 将图标复制到 `/usr/share/icons/hicolor/256x256/apps/yourapp.png`
- 创建 `.desktop` 文件指定 Icon 字段
## Usage Example
```cpp
AppConfig config = AppConfig::createDefault();
config.windowConfig.icon = Icon("assets/icons/icon.bmp");
Application& app = Application::get();
app.init(config);
```

BIN
Game/assets/icons/app.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
Game/assets/icons/icon.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,9 @@
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}

View File

@@ -0,0 +1,19 @@
#ifdef GL_ES
precision mediump float;
#endif
attribute vec2 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
uniform mat4 u_view;
uniform mat4 u_projection;
varying vec2 v_texCoord;
varying vec4 v_color;
void main() {
gl_Position = u_projection * u_view * vec4(a_position, 0.0, 1.0);
v_texCoord = a_texCoord;
v_color = a_color;
}

13
Game/shaders/sprite.frag Normal file
View File

@@ -0,0 +1,13 @@
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
varying vec4 v_color;
uniform sampler2D u_texture;
void main() {
vec4 texColor = texture2D(u_texture, v_texCoord);
gl_FragColor = texColor * v_color;
}

20
Game/shaders/sprite.vert Normal file
View File

@@ -0,0 +1,20 @@
#ifdef GL_ES
precision mediump float;
#endif
attribute vec2 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
uniform mat4 u_view;
uniform mat4 u_projection;
uniform sampler2D u_texture;
varying vec2 v_texCoord;
varying vec4 v_color;
void main() {
gl_Position = u_projection * u_view * vec4(a_position, 0.0, 1.0);
v_texCoord = a_texCoord;
v_color = a_color;
}

34
Game/src/main.cpp Normal file
View File

@@ -0,0 +1,34 @@
#include "SDL_log.h"
#include <SDL2/SDL.h>
#include <frostbite2D/core/application.h>
#include <frostbite2D/core/window.h>
#include <frostbite2D/graphics/renderer.h>
#include <frostbite2D/graphics/texture.h>
#include <glad/glad.h>
using namespace frostbite2D;
int main(int argc, char **argv) {
AppConfig config = AppConfig::createDefault();
config.appName = "Frostbite2D Test App";
config.appVersion = "1.0.0";
config.windowConfig.width = 800;
config.windowConfig.height = 600;
config.windowConfig.title = "Frostbite2D - Renderer Test";
Application& app = Application::get();
if (!app.init(config)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to initialize application!");
return -1;
}
SDL_Log("Starting main loop...");
app.run();
app.shutdown();
SDL_Log("Application exited normally");
return 0;
}