Есть ли способ инициализировать или сбросить текстуру OpenGL со сплошным цветом? Я могу использовать функции до OpenGL 4.0, так как я хотел бы поддерживать Intel HD Graphics 4000 для ноутбуков.
Есть ли функция OpenGL для сброса текстуры до сплошного цвета?
Ответы (4)
Может быть, вы можете использовать фреймбуфер. Вы можете связать его с текстурой и рисовать то, что хотите, в фреймбуфере. Если запасной вариант работает, вы очищаете буфер кадра до нужного вам цвета.
И затем вы рисуете фреймбуфер как текстуру.
Если вы отвяжете текстуру от объекта модуля/сэмплера, доступ к текстуре будет полностью белым. Поэтому я предлагаю вам просто добавить униформу для цветовой модуляции. Если вам нужен сплошной цвет, отмените привязку текстуры и установите для этой цветовой униформы все, что вы хотите.
Но, откровенно говоря, мне кажется, что вы хотите заново реализовать фиксированный конвейер функций OpenGL, где у вас было большое количество переключателей для получения желаемых эффектов. Мы, наконец, избавились от этого, и теперь вы хотите реинкарнировать это проклятие?
Хотя вы говорите, что можете использовать до GL 4.0 (и у вас есть несколько ответов на этот вопрос), я все же хотел бы отметить, что начиная с GL 4.4 также существует glClearTexImage()
.
Соответствующее расширение OpenGL для этого — ARB_clear_texture
. Говорят, что Intel HD 4000 поддерживает GL4.0, но с более новыми драйверами было добавлено множество расширений, реализующих расширения для уровней 4.1, 4.2 и 4.3. Однако я пока не нашел ни одного источника, утверждающего, что Intel начала внедрять функции уровня 4.4. Последний источник, который я нашел, это OpenGL feature matrix from february 2014
, показывающий, что Intel des еще не поддерживает эту функцию. Но я считаю вполне вероятным, что это расширение может поддерживаться в будущих версиях драйверов.
Вы можете сделать это, скопировав свои цветовые данные в уже созданную текстуру, используя glTexSubImage2D и присвоив ему полные размеры текстуры. Отличие в том, что это не создает новый буфер, а только обновляет его.