Как изменить один тексель в текстуре OpenGL - PullRequest
7 голосов
/ 20 июля 2009

Я хочу изменить некоторые тексели в текстуре OpenGL для заданного местоположения. Может кто-нибудь помочь мне с этим пожалуйста?

Это та функциональность, которую я хочу,

void ChangeTexelColor(int x, int y, GLuint id, int texW, int texH, GLenum format)
{
   //What is here ?     
}

Это будет использоваться для поддержания миникарты моей игры (если у кого-то есть идея по поддержанию динамической карты-текстуры-). Кстати, это должно быть сделано быстро. Спасибо.

Ответы [ 2 ]

11 голосов
/ 20 июля 2009

OpenGL имеет функцию glTexSubImage2D, которая предназначена именно для вас.

Вот функции, которые изменяют цвет одного текселя:

void changeTexelColor(GLuint id, GLint x, GLint y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
    uint8_t data[4];
    data[0] = r;
    data[1] = g;
    data[2] = b;
    data[3] = a;
    glBindTexture(GL_TEXTURE_2D, id);
    glTexSubImage2D(GL_TEXTURE_2D,
                    0,
                    x,
                    y,
                    1,
                    1,
                    GL_RGBA,
                    GL_UNSIGNED_BYTE,
                    data);
}
0 голосов
/ 20 июля 2009

С точки зрения производительности, вам может быть лучше хранить карту локально в виде собственного массива и выводить ее на экран в виде набора нетекстурированных четырехугольников.

Рендеринг примитивов сильно оптимизирован, особенно по сравнению с созданием или изменением текстур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...