Metal post-processing pipeline implementation
- Add custom Metal render target creation - Implement post-processing without GPU-CPU-GPU copies - Create Metal texture extraction system - Add Metal CRT shader pipeline integration - Modify screen rendering to use Metal when available - Enable shaders by default for testing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -44,8 +44,21 @@ Screen::Screen()
|
||||
initSDLVideo();
|
||||
|
||||
// Crea la textura de destino
|
||||
#ifdef __APPLE__
|
||||
const auto render_name = SDL_GetRendererName(renderer_);
|
||||
if (render_name && !strncmp(render_name, "metal", 5)) {
|
||||
// Usar nuestra propia Metal texture como render target
|
||||
game_canvas_ = shader::metal::createMetalRenderTarget(renderer_, param.game.width, param.game.height);
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Using custom Metal render target for game_canvas_");
|
||||
} else {
|
||||
// Fallback para otros renderers
|
||||
game_canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
|
||||
SDL_SetTextureScaleMode(game_canvas_, SDL_SCALEMODE_NEAREST);
|
||||
}
|
||||
#else
|
||||
game_canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
|
||||
SDL_SetTextureScaleMode(game_canvas_, SDL_SCALEMODE_NEAREST);
|
||||
#endif
|
||||
|
||||
// Crea el objeto de texto
|
||||
createText();
|
||||
@@ -99,7 +112,18 @@ void Screen::renderPresent() {
|
||||
clean();
|
||||
|
||||
if (Options::video.shaders) {
|
||||
#ifdef __APPLE__
|
||||
const auto render_name = SDL_GetRendererName(renderer_);
|
||||
if (render_name && !strncmp(render_name, "metal", 5)) {
|
||||
// Use Metal post-processing with our custom render target
|
||||
shader::metal::renderWithPostProcessing(renderer_, game_canvas_);
|
||||
} else {
|
||||
// Fallback to standard shader system for non-Metal renderers
|
||||
shader::render();
|
||||
}
|
||||
#else
|
||||
shader::render();
|
||||
#endif
|
||||
} else {
|
||||
SDL_RenderTexture(renderer_, game_canvas_, nullptr, nullptr);
|
||||
SDL_RenderPresent(renderer_);
|
||||
|
||||
Reference in New Issue
Block a user