implemented frame buffer, working. however, msaa now broken

This commit is contained in:
Dennis Eichhorn 2024-12-14 15:03:04 +01:00
parent bc28becf9c
commit 4cfe20e4e2
6 changed files with 43 additions and 16 deletions

View File

@ -59,10 +59,10 @@ void ams_create(AssetManagementSystem* ams, BufferMemory* buf, int32 chunk_size,
hashmap_create(&ams->hash_map, count, sizeof(HashEntryInt64), buf);
// setup asset_memory
chunk_init(&ams->asset_memory, buf, count, sizeof(Asset), 1);
chunk_init(&ams->asset_memory, buf, count, sizeof(Asset), 64);
// setup asset_data_memory
chunk_init(&ams->asset_data_memory, buf, count, chunk_size, 1);
chunk_init(&ams->asset_data_memory, buf, count, chunk_size, 64);
ams->first = NULL;
ams->last = NULL;
@ -71,7 +71,7 @@ void ams_create(AssetManagementSystem* ams, BufferMemory* buf, int32 chunk_size,
}
// WARNING: buf size see ams_get_buffer_size
void ams_create(AssetManagementSystem* ams, byte* buf, int chunk_size, int count)
void ams_create(AssetManagementSystem* ams, byte* buf, int32 chunk_size, int32 count)
{
ASSERT_SIMPLE(chunk_size);
@ -82,7 +82,7 @@ void ams_create(AssetManagementSystem* ams, byte* buf, int chunk_size, int count
ams->asset_memory.count = count;
ams->asset_memory.chunk_size = sizeof(Asset);
ams->asset_memory.last_pos = -1;
ams->asset_memory.alignment = 1;
ams->asset_memory.alignment = 64;
ams->asset_memory.memory = buf;
ams->asset_memory.free = (uint64 *) (ams->asset_memory.memory + ams->asset_memory.chunk_size * count);
@ -90,7 +90,7 @@ void ams_create(AssetManagementSystem* ams, byte* buf, int chunk_size, int count
ams->asset_data_memory.count = count;
ams->asset_data_memory.chunk_size = chunk_size;
ams->asset_data_memory.last_pos = -1;
ams->asset_data_memory.alignment = 1;
ams->asset_data_memory.alignment = 64;
ams->asset_data_memory.memory = (byte *) (ams->asset_memory.free + CEIL_DIV(count, 64));
ams->asset_data_memory.free = (uint64 *) (ams->asset_data_memory.memory + ams->asset_data_memory.chunk_size * count);
@ -112,7 +112,7 @@ int32 ams_calculate_chunks(const AssetManagementSystem* ams, int32 byte_size)
}
inline
int64 ams_get_buffer_size(int count, int chunk_size)
int64 ams_get_buffer_size(int32 count, int32 chunk_size)
{
return hashmap_size(count, sizeof(HashEntryInt64)) // hash map
+ sizeof(Asset) * count + CEIL_DIV(count, 64) * sizeof(uint64) // asset_memory

View File

@ -624,7 +624,7 @@ f32 ui_text_create(
vertex_rect_create(
vertices, index, zindex,
offset_x, offset_y2, glyph->metrics.width * scale, glyph->metrics.height * scale, UI_ALIGN_H_LEFT, UI_ALIGN_V_BOTTOM,
color_index->value_int, glyph->coords.x1, glyph->coords.y1, glyph->coords.x2, glyph->coords.y2
color_index->value_float, glyph->coords.x1, glyph->coords.y1, glyph->coords.x2, glyph->coords.y2
);
offset_x += (glyph->metrics.width + glyph->metrics.advance_x) * scale;
@ -707,13 +707,13 @@ void ui_button_create(
vertex_rect_border_create(
vertices, index, zindex,
x->value_int, y->value_int, width->value_int, height->value_int, 1, UI_ALIGN_H_LEFT, UI_ALIGN_V_BOTTOM,
x->value_float, y->value_float, width->value_float, height->value_float, 1, UI_ALIGN_H_LEFT, UI_ALIGN_V_BOTTOM,
12, 0.0f, 0.0f
);
vertex_rect_create(
vertices, index, zindex,
x->value_int + 1, y->value_int + 1, width->value_int - 2, height->value_int - 2, UI_ALIGN_H_LEFT, UI_ALIGN_V_BOTTOM,
x->value_float + 1, y->value_float + 1, width->value_float - 2, height->value_float - 2, UI_ALIGN_H_LEFT, UI_ALIGN_V_BOTTOM,
14, 0.0f, 0.0f
);
@ -721,8 +721,8 @@ void ui_button_create(
vertex_text_create(
vertices, index, zindex,
x->value_int, y->value_int, width->value_int, height->value_int, align_h->value_int, align_v->value_int,
&theme->font, text->value_str, size->value_int, color_index->value_int
x->value_float, y->value_float, width->value_float, height->value_float, align_h->value_float, align_v->value_float,
&theme->font, text->value_str, size->value_float, color_index->value_float
);
element->vertex_count = *index - start;

View File

@ -479,6 +479,17 @@ uint32 gpuapi_framebuffer_generate()
return fbo;
}
inline
uint32 gpuapi_renderbuffer_generate()
{
uint32 rbo;
glGenRenderbuffers(1, &rbo);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
return rbo;
}
inline
void gpuapi_buffer_update_dynamic(uint32 vbo, int32 size, const void* data)
{
@ -595,6 +606,14 @@ int get_gpu_free_memory()
return available;
}
void gpuapi_error()
{
GLenum err;
while ((err = glGetError()) != GL_NO_ERROR) {
ASSERT_SIMPLE(err == GL_NO_ERROR);
}
}
/*
void render_9_patch(GLuint texture,
int32 imgWidth, int32 imgHeight,

View File

@ -37,16 +37,16 @@ void log_counter(int32, int64);
#if (!DEBUG && !INTERNAL)
// Don't perform any logging at log level 0
#define LOG(str, should_log, save) ((void) 0)
#define LOG_FORMAT(format, data_type, data, should_log, save) ((void) 0)
#define LOG(str, should_log, save) log((str), (should_log), (save), __FILE__, __func__, __LINE__)
#define LOG_FORMAT(format, data_type, data, should_log, save) log((format), (data_type), (data), (should_log), (save), __FILE__, __func__, __LINE__)
#define LOG_TO_FILE() ((void) 0)
#define LOG_INCREMENT(a) ((void) 0)
#define LOG_INCREMENT_BY(a, b) ((void) 0)
#define LOG_COUNTER(a, b) ((void) 0)
#define RESET_COUNTER(a) ((void) 0)
#else
#define LOG(str, should_log, save) ((void) 0)
#define LOG_FORMAT(format, data_type, data, should_log, save) ((void) 0)
#define LOG(str, should_log, save) log((str), (should_log), (save), __FILE__, __func__, __LINE__)
#define LOG_FORMAT(format, data_type, data, should_log, save) log((format), (data_type), (data), (should_log), (save), __FILE__, __func__, __LINE__)
#define LOG_TO_FILE() log_to_file()
#define LOG_INCREMENT(a) log_increment((a), 1)
#define LOG_INCREMENT_BY(a, b) log_increment((a), (b))

View File

@ -66,6 +66,8 @@ void chunk_alloc(ChunkMemory* buf, uint64 count, uint64 chunk_size, int32 alignm
ASSERT_SIMPLE(chunk_size);
ASSERT_SIMPLE(count);
chunk_size = ROUND_TO_NEAREST(chunk_size, alignment);
buf->memory = alignment < 2
? (byte *) platform_alloc(count * chunk_size + sizeof(buf->free) * CEIL_DIV(count, 64))
: (byte *) platform_alloc_aligned(count * chunk_size + sizeof(buf->free) * CEIL_DIV(count, 64), alignment);
@ -101,7 +103,8 @@ void chunk_init(ChunkMemory* buf, BufferMemory* data, uint64 count, uint64 chunk
ASSERT_SIMPLE(chunk_size);
ASSERT_SIMPLE(count);
// @bug what if an alignment is defined?
chunk_size = ROUND_TO_NEAREST(chunk_size, alignment);
buf->memory = buffer_get_memory(data, count * chunk_size + sizeof(buf->free) * CEIL_DIV(count, 64));
buf->count = count;
@ -125,6 +128,8 @@ void chunk_init(ChunkMemory* buf, byte* data, uint64 count, uint64 chunk_size, i
ASSERT_SIMPLE(chunk_size);
ASSERT_SIMPLE(count);
chunk_size = ROUND_TO_NEAREST(chunk_size, alignment);
// @bug what if an alignment is defined?
buf->memory = data;

View File

@ -81,9 +81,12 @@
if constexpr (!(a)) { \
*(volatile int *) 0 = 0; \
}
#define ASSERT_GPU_API() gpuapi_error()
#else
#define ASSERT_SIMPLE(a) ((void) 0)
#define ASSERT_SIMPLE_CONST(a) ((void) 0)
#define ASSERT_GPU_API() ((void) 0)
#endif
#define ASSERT_TRUE(a) \