Генерация всевозможных интервалов целых чисел

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

blockquote>

Ошибки 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; }

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

3
задан Guillaume 26 February 2019 в 10:37
поделиться

2 ответа

Я написал метод, который делает то, что вы просили. На это не очень красиво смотреться, но он делает свою работу.

def subIntervals(a,b):
    outputList = [[[a]]]
    for n in range(a+1, b+1):
        newOutputList = []
        for e in outputList:
            newOutputList.append(e + [[n]])
            newOutputList.append(e[:-1] + [[e[-1][0], n]])
        outputList = newOutputList
    return outputList

Я добавлю объяснение, если это необходимо.

0
ответ дан markuscosinus 26 February 2019 в 10:37
поделиться

Вы можете использовать функцию, которая выдает интервалы от чисел, ближайших к a (который сам является a) до b, а затем рекурсивно возвращает интервалы от a + 1 до b:

[ 110]

, так что:

list(intervals(2, 5))

возвращает:

[[[2], [3], [4], [5]],
 [[2], [3], [4, 5]],
 [[2], [3, 4], [5]],
 [[2], [3, 5]],
 [[2, 3], [4], [5]],
 [[2, 3], [4, 5]],
 [[2, 4], [5]],
 [[2, 5]]]
0
ответ дан blhsing 26 February 2019 в 10:37
поделиться