Пример #1
0
struct vertex_buffer* vertex_buffer_new() {
    struct vertex_buffer* buffer = STRUCT_NEW(vertex_buffer);
    
    glGenVertexArrays(1, &buffer->vao);
    glBindVertexArray(buffer->vao);
    
    glGenBuffers(1, &buffer->vbo);
    glBindBuffer(GL_ARRAY_BUFFER, buffer->vbo);
    
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);
    glEnableVertexAttribArray(2);
    
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, VERTEX_SIZE, VERTEX_OFFSET_POS);
    glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, VERTEX_SIZE, VERTEX_OFFSET_COLOR);
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, VERTEX_SIZE, VERTEX_OFFSET_UV);
    
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);
    glDisableVertexAttribArray(2);
    
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);

    buffer->data = s_malloc(VERTEX_SIZE * MAX_OBJECTS);
    buffer->n_objs = 0;
    
    return buffer;
}
Пример #2
0
struct sprite* sprite_new_container(struct rect* r) {
    struct sprite* s = STRUCT_NEW(sprite);
    s->type = SPRITE_TYPE_CONTAINER;
    
    sprite_init(s, r->width, r->height);
    sprite_set_glyph(s, r, NULL, 0);
    return s;
}
Пример #3
0
struct sprite* sprite_new(struct sprite_frame* frame){
    struct sprite* s = STRUCT_NEW(sprite);
    s->type = SPRITE_TYPE_PIC;
    
    sprite_init(s, frame->source_rect.width, frame->source_rect.height);
    sprite_set_sprite_frame(s, frame);
    return s;
}
Пример #4
0
struct window* win_alloc()
{
    struct window* win = STRUCT_NEW(window);
    win->cursor_x = 0.0f;
    win->cursor_y = 0.0f;
    win->is_touch_down = 0;
    return win;
}
Пример #5
0
struct sprite_frame* sprite_frame_new(const char* key) {
    struct sprite_frame* f = STRUCT_NEW(sprite_frame);
    memset(f, 0, sizeof(struct sprite_frame));
    int len = strlen(key);
    f->key = s_calloc(len+1);
    strcpy(f->key, key);
    
    sprite_frame_cache_add(GAME->sprite_frame_cache, f);
    return f;
}
Пример #6
0
struct shader* shader_new() {
    struct shader* shader = STRUCT_NEW(shader);
    memset(shader->shader_programs, 0, MAX_SHADER*sizeof(GLuint));
    
    shader_load_all(shader);
    
    set_builtin_uniform(shader->uniforms[BUILT_IN_MIX_COLOR], BUILT_IN_MIX_COLOR, UNIFORM_4F, "mix_color");
    
    return shader;
}
Пример #7
0
struct sprite* sprite_new_clip(struct rect* r) {
    struct sprite* s = STRUCT_NEW(sprite);
    s->type = SPRITE_TYPE_CLIP;
    
    sprite_init(s, r->width, r->height);
    sprite_set_glyph(s, r, NULL, 0);
    
    s->x = r->x;
    s->y = r->y;
    return s;
}
Пример #8
0
struct render* render_new() {
    struct render* r = STRUCT_NEW(render);
    r->cur_program = 0;
    r->cur_tex_id = 0;
    r->vertex_buffer = vertex_buffer_new();
    r->render_state = 0;
    r->shader = shader_new();
    r->scissors.x = 0;
    r->scissors.y = 0;
    r->scissors.width = GAME->config.window_width;
    r->scissors.width = GAME->config.window_height;
    r->drawcall = 0;
    return r;
}
Пример #9
0
struct anim* anim_new(struct array* sprite_frames) {
    struct anim* anim = STRUCT_NEW(anim);
    
    anim->interval = 1.0f/4.0f;
    anim->callback = NULL;
    anim->sprite_frames = array_copy(sprite_frames);
    anim->speed = 1.0f;
    
    // privates
    anim->__id = ++__anim_id;
    anim->__now = 0.0f;
    anim->__cur_frame = 0;
    anim->__total_frame = array_size(anim->sprite_frames);
    anim->__state = ANIM_STATE_PLAY;
    return anim;
}
Пример #10
0
struct sprite_frame_cache* sprite_frame_cache_new() {
    struct sprite_frame_cache* c = STRUCT_NEW(sprite_frame_cache);
    c->cache = hashmapCreate(128, hash_str, hash_equal);
    c->nframes = 0;
    return c;
}
Пример #11
0
struct texture_cache* texture_cache_new()
{
    struct texture_cache* cache = STRUCT_NEW(texture_cache);
    cache->cache = hashmapCreate(32, hash_str, hash_equal);
    return cache;
}