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;
}
示例#2
0
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;
}