gs_texture_t device_cubetexture_create(gs_device_t device, uint32_t size, enum gs_color_format color_format, uint32_t levels, const uint8_t **data, uint32_t flags) { struct gs_texture_cube *tex = bzalloc(sizeof(struct gs_texture_cube)); tex->base.device = device; tex->base.type = GS_TEXTURE_CUBE; tex->base.format = color_format; tex->base.levels = levels; tex->base.gl_format = convert_gs_format(color_format); tex->base.gl_internal_format = convert_gs_internal_format(color_format); tex->base.gl_target = GL_TEXTURE_CUBE_MAP; tex->base.is_render_target = (flags & GS_RENDER_TARGET) != 0; tex->base.gen_mipmaps = (flags & GS_BUILD_MIPMAPS) != 0; tex->size = size; if (!gl_gen_textures(1, &tex->base.texture)) goto fail; if (!upload_texture_cube(tex, data)) goto fail; return (gs_texture_t)tex; fail: gs_cubetexture_destroy((gs_texture_t)tex); blog(LOG_ERROR, "device_cubetexture_create (GL) failed"); return NULL; }
stagesurf_t device_create_stagesurface(device_t device, uint32_t width, uint32_t height, enum gs_color_format color_format) { struct gs_stage_surface *surf; surf = bzalloc(sizeof(struct gs_stage_surface)); surf->device = device; surf->format = color_format; surf->width = width; surf->height = height; surf->gl_format = convert_gs_format(color_format); surf->gl_internal_format = convert_gs_internal_format(color_format); surf->gl_type = get_gl_format_type(color_format); surf->bytes_per_pixel = gs_get_format_bpp(color_format)/8; if (!create_pixel_pack_buffer(surf)) { blog(LOG_ERROR, "device_create_stagesurface (GL) failed"); stagesurface_destroy(surf); return NULL; } return surf; }