// Copyright (c) 2023 Alex Diener. All rights reserved.

#include "PROJECT_NAME/ShaderConfigurationRoom.h"
#include "stem_core.h"

#define stemobject_implementation ShaderConfigurationRoom

stemobject_vtable_begin();
stemobject_vtable_entry(dispose);
stemobject_vtable_entry(setViewMatrix);
stemobject_vtable_entry(referenceViewMatrix);
stemobject_vtable_end();

#define UNIFORM_INDEX_projectionTransform   0
#define UNIFORM_INDEX_viewTransform         1
#define UNIFORM_INDEX_texture               2

ShaderConfigurationRoom * ShaderConfigurationRoom_create(Shader * shader) {
	stemobject_create_implementation(init, shader)
}

bool ShaderConfigurationRoom_init(ShaderConfigurationRoom * self, Shader * shader) {
	call_super(init, self, shader);
	self->uniforms[UNIFORM_INDEX_texture].value.int1 = 0;
	return true;
}

void ShaderConfigurationRoom_dispose(ShaderConfigurationRoom * self) {
	call_super_virtual(dispose, self);
}

void ShaderConfigurationRoom_setViewMatrix(ShaderConfigurationRoom * self, Matrix4x4f matrix) {
	ShaderUniformConfiguration_setMat4_Matrix4x4f(&self->uniforms[UNIFORM_INDEX_viewTransform], matrix);
}

void ShaderConfigurationRoom_referenceViewMatrix(ShaderConfigurationRoom * self, ShaderUniformConfiguration * uniform) {
	self->uniforms[UNIFORM_INDEX_viewTransform].reference = uniform;
}
