<commit_before>
#pragma once

#include <type_traits>

namespace gl
{

////////////////////////////////////////

enum class capability
{
	BLEND = GL_BLEND,
	CULL_FACE = GL_CULL_FACE,
	DEPTH_TEST = GL_DEPTH_TEST,
	DITHER = GL_DITHER,
	POLYGON_OFFSET_FILL = GL_POLYGON_OFFSET_FILL,
	SAMPLE_ALPHA_TO_COVERAGE = GL_SAMPLE_ALPHA_TO_COVERAGE,
	SCISSOR_TEST = GL_SCISSOR_TEST,
	STENCIL_TEST = GL_STENCIL_TEST,
};

////////////////////////////////////////

enum class buffer_bit
{
	COLOR_BUFFER_BIT = GL_COLOR_BUFFER_BIT,
	DEPTH_BUFFER_BIT = GL_DEPTH_BUFFER_BIT,
	STENCIL_BUFFER_BIT = GL_STENCIL_BUFFER_BIT,
};

typedef std::underlying_type<buffer_bit>::type buffer_bits;

inline buffer_bits operator|( buffer_bit a, buffer_bit b )
{
	return static_cast<buffer_bits>( a ) | static_cast<buffer_bits>( b );
}

inline buffer_bits operator|( buffer_bits a, buffer_bit b )
{
	return a | static_cast<buffer_bits>( b );
}

inline buffer_bits operator|( buffer_bit a, buffer_bits b )
{
	return static_cast<buffer_bits>( a ) | b;
}

////////////////////////////////////////

enum class data_type
{
	BYTE = GL_BYTE,
	UNSIGNED_BYTE = GL_UNSIGNED_BYTE,
	SHORT = GL_SHORT,
	UNSIGNED_SHORT = GL_UNSIGNED_SHORT,
	FLOAT = GL_FLOAT,
};

template<typename D>
struct gl_data_type {};

template<>
struct gl_data_type<float>
{
	enum { value = GL_FLOAT };
};

////////////////////////////////////////

enum class image_type<commit_msg>Added enum for uniform types.<commit_after>
#pragma once

#include <type_traits>

namespace gl
{

////////////////////////////////////////

enum class capability
{
	BLEND = GL_BLEND,
	CULL_FACE = GL_CULL_FACE,
	DEPTH_TEST = GL_DEPTH_TEST,
	DITHER = GL_DITHER,
	POLYGON_OFFSET_FILL = GL_POLYGON_OFFSET_FILL,
	SAMPLE_ALPHA_TO_COVERAGE = GL_SAMPLE_ALPHA_TO_COVERAGE,
	SCISSOR_TEST = GL_SCISSOR_TEST,
	STENCIL_TEST = GL_STENCIL_TEST,
};

////////////////////////////////////////

enum class buffer_bit
{
	COLOR_BUFFER_BIT = GL_COLOR_BUFFER_BIT,
	DEPTH_BUFFER_BIT = GL_DEPTH_BUFFER_BIT,
	STENCIL_BUFFER_BIT = GL_STENCIL_BUFFER_BIT,
};

typedef std::underlying_type<buffer_bit>::type buffer_bits;

inline buffer_bits operator|( buffer_bit a, buffer_bit b )
{
	return static_cast<buffer_bits>( a ) | static_cast<buffer_bits>( b );
}

inline buffer_bits operator|( buffer_bits a, buffer_bit b )
{
	return a | static_cast<buffer_bits>( b );
}

inline buffer_bits operator|( buffer_bit a, buffer_bits b )
{
	return static_cast<buffer_bits>( a ) | b;
}

////////////////////////////////////////

enum class data_type
{
	BYTE = GL_BYTE,
	UNSIGNED_BYTE = GL_UNSIGNED_BYTE,
	SHORT = GL_SHORT,
	UNSIGNED_SHORT = GL_UNSIGNED_SHORT,
	FLOAT = GL_FLOAT,
};

template<typename D>
struct gl_data_type {};

template<>
struct gl_data_type<float>
{
	enum { value = GL_FLOAT };
};

////////////////////////////////////////

enum class uniform_type
{
	FLOAT = GL_FLOAT,
	FLOAT_VEC2 = GL_FLOAT_VEC2,
	FLOAT_VEC4 = GL_FLOAT_VEC4,
	FLOAT_MAT4 = GL_FLOAT_MAT4,
	OTHER = 0,
};

////////////////////////////////////////

enum class image_type
{'fraction_non_alphanumeric': 0.19840743198407432, 'fraction_numerical': 0.00232249502322495, 'mean_word_length': 2.9775725593667546, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1908826', 'n_tokens_mistral': 1125, 'n_tokens_neox': 1092, 'n_words': 212}