// Copyright (c) 2021 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include #include #include #include /** * Structure detailing information about a texture. * Because we plan to upload the pixels of a texture into the GPU, we don't * store the pixels in memory because we don't need to! */ typedef struct { int32_t width; int32_t height; GLuint id; } texture_t; /** Information about a single pixel. */ typedef struct { uint8_t r, g, b, a ; } pixel_t; /** * Creates a new texture that can be written in to. * * @param width Width of the texture (in pixels). * @param height Height of the texture (in pixels). * @param pixels Default pixel array, set to NULL to set all pixel data to 0. * @return The newly created texture instance. */ texture_t * textureCreate(int32_t width, int32_t height, pixel_t *pixels); /** * Buffer pixel data onto the GPU. Pixel buffering is rather costly so avoid * doing this too often. * * @param texture Texture to buffer in to. * @param x X coordinate in texture space to render to. * @param y Y coordinate in texture space to render to. * @param width Width of the pixel region you're buffering. * @param height Height of the pixel region you're buffering. * @param pixels Array of pixels to buffer onto the GPU. */ void textureBufferPixels(texture_t *texture, int32_t x, int32_t y, int32_t width, int32_t height, pixel_t *pixels ); /** * Clean a previously created texture. * @param texture Texture to clean up. */ void textureDispose(texture_t *texture);