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

#ifndef __ShaderConfigurationRoom_H__
#define __ShaderConfigurationRoom_H__

typedef struct ShaderConfigurationRoom ShaderConfigurationRoom;
#define ShaderConfigurationRoom_superclass ShaderConfiguration

#include "renderer/ShaderConfiguration.h"

#define ShaderConfigurationRoom_ivars \
	ShaderConfiguration_ivars

#define ShaderConfigurationRoom_vtable(self_type) \
	ShaderConfiguration_vtable(self_type) \
	\
	void (* setViewMatrix)(self_type * self, Matrix4x4f matrix); \
	void (* referenceViewMatrix)(self_type * self, ShaderUniformConfiguration * uniform);

stemobject_declare(ShaderConfigurationRoom)

ShaderConfigurationRoom * ShaderConfigurationRoom_create(Shader * shader);
bool ShaderConfigurationRoom_init(ShaderConfigurationRoom * self, Shader * shader);
void ShaderConfigurationRoom_dispose(ShaderConfigurationRoom * self);

void ShaderConfigurationRoom_setViewMatrix(ShaderConfigurationRoom * self, Matrix4x4f matrix);
void ShaderConfigurationRoom_referenceViewMatrix(ShaderConfigurationRoom * self, ShaderUniformConfiguration * uniform);

#endif
