RyanHub – file viewer
filename: include/renderer.h
branch: main
back to repo
#ifndef RENDERER_H  
#define RENDERER_H  

#include <glad/glad.h>  
#include <vector>  
#include <string>  
#include "shaderClass.h"  

class Renderer {
public:
	Renderer(Shader& shaderProgram, GLuint* textureIDs, int textureCount);
	~Renderer();

	struct ColorRGB {
		float r, g, b;
		ColorRGB(float r, float g, float b) : r(r), g(g), b(b) {}
		ColorRGB(int r, int g, int b) : r(r / 255.0f), g(g / 255.0f), b(b / 255.0f) {}
		ColorRGB() : r(0), g(0), b(0) {}
	};
	struct QuadVertices {
		GLfloat x1, y1, x2, y2, x3, y3, x4, y4;
	};	

	void renderFrame();
	void drawQuad(const QuadVertices& verts, const ColorRGB& color, int textureIndex, const float* uvs = nullptr);

private:
	Shader& shaderProgram;
	GLuint* textureIDs;
	int textureCount;

	GLuint masterVAO;
	GLuint masterVBO;
	GLuint masterEBO;

	GLint* textureUniformLocations;
	std::vector<std::pair<float, float>> texelSizes;

	std::vector<GLfloat> masterVertices;
	std::vector<GLuint> masterIndices;

	void init();
};

GLuint loadTexture(const char* filepath);
void captureRegion(int x, int y, int w, int h, const std::string& filepath);

#endif