glTexImage2D GL_INVALID_OPERATION с неподписанным int [duplicate]

You can do this using PHP



<!DOCTYPE html>
<html>
<body>

<?php
$txt1 = "the color is";
$txt2 = " red!";
echo $txt1.$txt2;
?>  

</body>
</html>

This will combine two strings and the putput will be: "the color is"
You can get the same output using below javascript code.




<script type="text/javascript">
var data1 = "the color is";
var data2 = "red";
var result = data1+" "+data2;
alert(result);
</script>
5
задан Nicol Bolas 28 November 2012 в 02:57
поделиться

1 ответ

При проверке ошибок я получаю [EDIT:] 1282 («недействительная операция»). Я полагаю, это означает, что OpenGL все еще использует OpenGL 2 для glTexImage2D, и поэтому вызов терпит неудачу.

Ошибки OpenGL не так сложно понять. GL_INVALID_ENUM/VALUE выдаются, когда вы передаете что-то переименование или значение, которое является неожиданным, неподдерживаемым или вне диапазона. Если вы передадите «17» в качестве внутреннего формата в glTexImage2D, вы получите GL_INVALID_ENUM, потому что 17 не является допустимым номером перечисления для внутреннего формата. Если вы пройдете 103,422 в качестве ширины до glTexImage2D, вы получите GL_INVALID_VALUE, потому что 103,422 почти наверняка больше размера GL_MAX_TEXTURE_2D.

GL_INVALID_OPERATION всегда используется для комбинации состояния, которые идут не так. Либо есть какое-то ранее заданное состояние контекста, которое не связывается с вызываемой вами функцией, или два или более скомпонованных параметра создают проблему. Последнее имеет место, если вы здесь.

Если ваша реализация вообще не поддерживает целые текстуры, вы получите INVALID_ENUM (поскольку внутренний формат не является допустимым форматом). Получение INVALID_OPERATION означает, что что-то еще не так.

А именно:

glTexImage2D(GL_TEXTURE_2D,0,get_type(1), TEXTURE_SIZE,TEXTURE_SIZE, 0,get_type(2),data_type,data);

Ваш вызов get_type(2) возвращает GL_RGB или GL_RGBA во всех случаях. Однако при использовании интегральных форматов изображений вы должны использовать формат передачи изображения с _INTEGER в конце .

Таким образом, ваш get_type(2) должен быть таким:

inline GLenum get_type(int which) { return (which==1)? GL_RGB16UI: GL_RGB_INTEGER; }

И аналогичным образом для других встроенных форматов изображений.

8
ответ дан Nicol Bolas 22 August 2018 в 13:31
поделиться
  • 1
    Я работал с первой ссылкой, в основном, которая не упоминала _INTEGER. Изменение кода выше, безусловно, работает, но для целочисленных текстур я вижу черный (примечание, изменение & quot; данные [i] = (unsigned char) (0); & quot; до 128 вначале). Имеет ли это какое-либо отношение к интерпретации фиксированной функции «интегральных форматов», будет решаться с помощью вектора целых чисел »- т. Е. Рисунка фиксированной функции + текстуры OpenGL 4 = неопределенное поведение? – imallett 3 August 2012 в 11:36
  • 2
    @Ian: Во-первых, целые текстуры GL 3, а не GL 4. Во-вторых, целые текстуры не работают с фиксированной функцией; вы должны использовать шейдеры с ними. – Nicol Bolas 3 August 2012 в 12:30
  • 3
    Я должен уточнить, что я имел в виду: фиксированный рисунок функции + целые текстуры! = Смысл; естественно, с плавающей точкой GL 3, 4 текстуры работают нормально. В любом случае, потрясающе, спасибо! – imallett 3 August 2012 в 12:45
Другие вопросы по тегам:

Похожие вопросы: