Files
vibe1_delta/source/ball.h
Sergio Valor 0474c3166d Implementar batch rendering con SDL_RenderGeometry para rendimiento masivo
- Reemplazar 50K+ llamadas SDL_RenderTexture individuales por 1 SDL_RenderGeometry
- Crear sistema de acumulacion de vertices y indices para batch rendering
- Añadir addSpriteToBatch() para generar quads con posicion, UV y color
- Implementar getters Ball::getPosition() y getColor() para batch data
- Añadir Texture::getSDLTexture() para acceso directo a textura SDL
- Conversion correcta colores Uint8 a float para SDL_Vertex.color
- Arquitectura: 4 vertices + 6 indices por sprite (2 triangulos)

Rendimiento conseguido:
- 50K bolas: 10 FPS -> >75 FPS constante (mejora 750%)
- 100K bolas: inutilizable -> fluido y jugable
- Escalabilidad masiva para renderizado de sprites

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 12:12:50 +02:00

48 lines
1.5 KiB
C++

#pragma once
#include <SDL3/SDL_rect.h> // for SDL_FRect
#include <memory> // for shared_ptr, unique_ptr
#include "defines.h" // for Color
#include "external/sprite.h" // for Sprite
class Texture;
class Ball
{
private:
std::unique_ptr<Sprite> sprite_; // Sprite para pintar la clase
SDL_FRect pos_; // Posición y tamaño de la pelota
float vx_, vy_; // Velocidad
float gravity_force_; // Gravedad
Color color_; // Color de la pelota
bool on_floor_; // Indica si la pelota está ya en el suelo
bool stopped_; // Indica si la pelota ha terminado de moverse;
float loss_; // Coeficiente de rebote. Pérdida de energía en cada rebote
public:
// Constructor
Ball(float x, float vx, float vy, Color color, std::shared_ptr<Texture> texture);
// Destructor
~Ball() = default;
// Actualiza la lógica de la clase
void update(float deltaTime);
// Pinta la clase
void render();
// Modifica la velocidad
void modVel(float vx, float vy);
// Cambia la gravedad
void switchGravity();
// Getters para debug
float getVelocityY() const { return vy_; }
float getGravityForce() const { return gravity_force_; }
bool isOnFloor() const { return on_floor_; }
// Getters para batch rendering
SDL_FRect getPosition() const { return pos_; }
Color getColor() const { return color_; }
};