taisei/src/renderer/gl33/texture.h
2024-05-17 14:11:48 +02:00

46 lines
1.9 KiB
C

/*
* This software is licensed under the terms of the MIT License.
* See COPYING for further information.
* ---
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
*/
#pragma once
#include "taisei.h"
#include "../api.h"
#include "../glcommon/texture.h"
#include "gl33.h"
#include "resource/texture.h"
typedef struct Texture {
GLTextureFormatInfo *fmt_info;
TextureUnit *binding_unit;
GLuint gl_handle;
GLuint pbo;
GLenum bind_target;
TextureParams params;
bool mipmaps_outdated;
char debug_label[R_DEBUG_LABEL_SIZE];
} TextureImpl;
Texture *gl33_texture_create(const TextureParams *params);
void gl33_texture_get_size(Texture *tex, uint mipmap, uint *width, uint *height);
void gl33_texture_get_params(Texture *tex, TextureParams *params);
const char *gl33_texture_get_debug_label(Texture *tex);
void gl33_texture_set_debug_label(Texture *tex, const char *label);
void gl33_texture_set_filter(Texture *tex, TextureFilterMode fmin, TextureFilterMode fmag);
void gl33_texture_set_wrap(Texture *tex, TextureWrapMode ws, TextureWrapMode wt);
void gl33_texture_invalidate(Texture *tex);
void gl33_texture_fill(Texture *tex, uint mipmap, uint layer, const Pixmap *image);
void gl33_texture_fill_region(Texture *tex, uint mipmap, uint layer, uint x, uint y, const Pixmap *image);
void gl33_texture_prepare(Texture *tex);
void gl33_texture_taint(Texture *tex);
void gl44_texture_clear(Texture *tex, const Color *clr);
void gl33_texture_clear(Texture *tex, const Color *clr);
void gl33_texture_destroy(Texture *tex);
bool gl33_texture_type_query(TextureType type, TextureFlags flags, PixmapFormat pxfmt, PixmapOrigin pxorigin, TextureTypeQueryResult *result);
bool gl33_texture_sampler_compatible(Texture *tex, UniformType sampler_type) attr_nonnull(1);
bool gl33_texture_dump(Texture *tex, uint mipmap, uint layer, Pixmap *dst);
bool gl33_texture_transfer(Texture *dst, Texture *src);