primera faeneta
This commit is contained in:
1 parent
2cd3f807ec
commit
6961986ad2
9 files changed
+193
No files matched your search
@@ -0,0 +1,22 @@
|
||||
BasedOnStyle: Google
|
||||
IndentWidth: 4
|
||||
NamespaceIndentation: All
|
||||
IndentAccessModifiers: false
|
||||
ColumnLimit: 0 # Sin límite de longitud de línea
|
||||
BreakBeforeBraces: Attach # Llaves en la misma línea
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
AllowShortBlocksOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AlignOperands: DontAlign
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
ContinuationIndentWidth: 4
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
Cpp11BracedListStyle: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
AllowAllConstructorInitializersOnNextLine: false
|
||||
PackConstructorInitializers: Never
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
@@ -1,3 +1,5 @@
|
||||
build/
|
||||
|
||||
# ---> C++
|
||||
# Prerequisites
|
||||
*.d
|
||||
@@ -82,6 +84,7 @@ $RECYCLE.BIN/
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(spectrum LANGUAGES CXX)
|
||||
|
||||
find_package(SDL3 REQUIRED CONFIG)
|
||||
|
||||
add_executable(spectrum
|
||||
source/core/main.cpp
|
||||
source/core/rendering/video.cpp
|
||||
source/core/system/director.cpp
|
||||
)
|
||||
|
||||
target_compile_features(spectrum PRIVATE cxx_std_20)
|
||||
|
||||
target_include_directories(spectrum PRIVATE
|
||||
source/core
|
||||
)
|
||||
|
||||
target_link_libraries(spectrum PRIVATE SDL3::SDL3)
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <memory>
|
||||
|
||||
#include "system/director.hpp"
|
||||
|
||||
auto main() -> int {
|
||||
auto director = std::make_unique<Director>();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
#include "rendering/video.hpp"
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
Video::Video(Config config)
|
||||
: config_(config) {
|
||||
initSDL();
|
||||
}
|
||||
|
||||
Video::~Video() {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
void Video::cleanup() {
|
||||
SDL_DestroyTexture(game_texture_);
|
||||
game_texture_ = nullptr;
|
||||
|
||||
SDL_DestroyRenderer(renderer_);
|
||||
renderer_ = nullptr;
|
||||
|
||||
SDL_DestroyWindow(window_);
|
||||
window_ = nullptr;
|
||||
}
|
||||
|
||||
auto Video::initSDL() -> int {
|
||||
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
||||
SDL_Log("No se pudo inicializar SDL: %s", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
window_ = SDL_CreateWindow("Mi ventana", config_.width, config_.height, 0);
|
||||
if (window_ == nullptr) {
|
||||
SDL_Log("No se pudo crear la ventana: %s", SDL_GetError());
|
||||
cleanup();
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
renderer_ = SDL_CreateRenderer(window_, nullptr);
|
||||
if (renderer_ == nullptr) {
|
||||
SDL_Log("No se pudo crear el renderer: %s", SDL_GetError());
|
||||
cleanup();
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
// SDL_SetRenderVSync(renderer_, config_.vsync ? 1 : 0);
|
||||
// SDL_SetRenderLogicalPresentation(renderer_, GameCanvas::WIDTH, GameCanvas::HEIGHT, toSdlPresentation(config_.scaling_mode));
|
||||
|
||||
game_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, config_.width, config_.height);
|
||||
if (game_texture_ == nullptr) {
|
||||
SDL_Log("No se pudo crear la textura de juego: %s", SDL_GetError());
|
||||
cleanup();
|
||||
SDL_Quit();
|
||||
return 1;
|
||||
}
|
||||
//SDL_SetTextureScaleMode(game_texture_, toSdlScaleMode(config_.texture_filter));
|
||||
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Video subsystem initialized successfully");
|
||||
|
||||
SDL_Delay(1000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
class Video {
|
||||
public:
|
||||
struct Config {
|
||||
bool fullscreen{false};
|
||||
float zoom{1.0F};
|
||||
float width{320.0F};
|
||||
float height{240.0F};
|
||||
};
|
||||
|
||||
Video(Config config);
|
||||
~Video();
|
||||
|
||||
private:
|
||||
Config config_;
|
||||
|
||||
SDL_Window* window_{nullptr};
|
||||
SDL_Renderer* renderer_{nullptr};
|
||||
SDL_Texture* game_texture_{nullptr};
|
||||
|
||||
auto initSDL() -> int;
|
||||
void cleanup();
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
namespace Defaults::Video {
|
||||
constexpr int ZOOM = 3;
|
||||
constexpr bool FULLSCREEN = false;
|
||||
constexpr float WIDTH = 320.0F;
|
||||
constexpr float HEIGHT = 240.0F;
|
||||
} // namespace Defaults::Video
|
||||
@@ -0,0 +1,26 @@
|
||||
#include "system/director.hpp"
|
||||
|
||||
#include "rendering/video.hpp"
|
||||
#include "system/defaults.hpp"
|
||||
|
||||
Director::Director() {
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Game start!");
|
||||
|
||||
video = std::make_shared<Video>(
|
||||
Video::Config{
|
||||
Defaults::Video::FULLSCREEN,
|
||||
Defaults::Video::ZOOM,
|
||||
Defaults::Video::WIDTH,
|
||||
Defaults::Video::HEIGHT});
|
||||
}
|
||||
|
||||
Director::~Director() {
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Bye!");
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
auto Director::iterate() -> int {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "rendering/video.hpp"
|
||||
|
||||
class Director {
|
||||
public:
|
||||
Director();
|
||||
~Director();
|
||||
|
||||
auto iterate() -> int;
|
||||
|
||||
private:
|
||||
std::shared_ptr<Video> video;
|
||||
};
|
||||
Reference in new issue
Block a user