Куки это не пуки ... Вот если ты полный гуки то тогда вставляют хренуки прям в пуки :(
1vanK
Сделать через дефайн?
1vanK
> У меня про спецификацию вопрос
Спецификация никого ни к чему не обязывает.
Делайте как нравится и не парьтесь.
1vanK
Смотри, гл это такая болипопа ... Даже если написано в спеке может вендор учудить
1vanK
> шанс того, что у кого-то не заработает
Вот тут:
https://gamedev.ru/flame/forum/?id=283841
мы замеряли частоту кадров, там (43.7z) у меня рисуется в дефолтный фреймбуфер с layout (location = 0) в шейдере.
Там разные видеокарты и у всех всё работало.
innuendo
> Смотри, гл это такая болипопа ... Даже если написано в спеке может вендор учудить
Ну да, с остальными такого не бывает, ведь не от драйверов зависит, а от чего-то ещё, видимо магического.
innuendo
> Смотри, гл это такая болипопа ... Даже если написано в спеке может вендор учудить
А слышал про плохого танцора? :)
Интел у нас по прежнему хромоногий и кривой? Из интереса запустил на uhd 750 свой двиг, и он упал на создании депт-стенцил текстуры при получении биндлесс хендла. При этом все колор текстуры были созданы без проблем.
gi.depthStencil = R_CreateTexture("***depthStencil***", GL_TEXTURE_RECTANGLE, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, 0, vid.width, vid.height, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, GL_NEAREST, GL_NEAREST, GL_UNSIGNED_INT_24_8, NULL); \\============ image_t *R_CreateTexture( char *texName, uint targetTex, uint intFormat, uint format, uint flags, uint width, uint height, uint warpS, uint warpT, uint filterMin, uint filterMag, uint imageType, uint *pixdata) { int i; image_t* image; bool clearData; if ( !pixdata) { pixdata = malloc( vid.width * vid.height * 4 * sizeof( size_t)); clearData = true; } else clearData = false; // find a free image_t for ( i = 0, image = gi.r_textures; i < gi.r_numTextures; i++, image++) { if ( !image->texnum) break; } if ( i == gi.r_numTextures) { if ( gi.r_numTextures == MAX_GLTEXTURES) VID_Error( ERR_FATAL, "MAX_GLTEXTURES"); gi.r_numTextures++; } image = &gi.r_textures[i]; strcpy( image->name, texName); image->width = width; image->height = height; image->upload_width = width; image->upload_height = height; image->type = it_screen; image->flags = flags; image->hash = Com_HashKey( image->name); image->texType = targetTex; image->intFormat = intFormat; image->dataType = imageType; glCreateTextures( targetTex, 1, &image->texnum); glTextureParameteri( image->texnum, GL_TEXTURE_WRAP_S, warpS); glTextureParameteri( image->texnum, GL_TEXTURE_WRAP_T, warpT); glTextureParameteri( image->texnum, GL_TEXTURE_MIN_FILTER, filterMin); glTextureParameteri( image->texnum, GL_TEXTURE_MAG_FILTER, filterMag); if ( image->flags & IF_MIPMAP) { image->numMips = CalcMipmapCount( width, height); glTextureParameteri( image->texnum, GL_TEXTURE_BASE_LEVEL, 0); glTextureParameteri( image->texnum, GL_TEXTURE_MAX_LEVEL, image->numMips-1); } else image->numMips = 1; if( image->flags & IF_SHADOW) glTextureParameteri( image->texnum, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); if ( targetTex == GL_TEXTURE_CUBE_MAP) { int face; for ( face = 0; face < 6; face++) { glTextureStorage2D( image->texnum, 1, intFormat, width, height); glTextureSubImage3D( image->texnum, 0, 0, 0, face, width, height, 1, format, imageType, pixdata); } } else { glTextureStorage2D( image->texnum, image->numMips, intFormat, width, height); glTextureSubImage2D( image->texnum, 0, 0, 0, width, height, format, imageType, pixdata); } image->handle = glGetTextureHandleARB( image->texnum); \\\==== падение тут glMakeTextureHandleResidentARB( image->handle); qglObjectLabel( GL_TEXTURE, image->texnum, strlen( image->name), image->name); if ( image->flags & IF_MIPMAP) glGenerateTextureMipmap( image->texnum); if( clearData) free( pixdata); return image; }
barnes
Может быть, дело в том, что получать хэндл текстуры и делать её резидентной нужно после создания мипмапов?
iw4nna.rock
мипы надо генерить после создания самой текстуры от и до. И да, в данном случае мипы не генерятся. Зачем они при создании депт-стенцил текстуры?
barnes
Ну тогда свою pixdata обнулите.
iw4nna.rock
> Ну тогда свою pixdata обнулите.
Она внизу ф-ции обнуляется если идет выделение. Ага-ага....
barnes
> Она внизу ф-ции обнуляется если идет выделение
для текстур под запись не нужно передавать выделенную память. Нужно передать (void*)0 в последний аргумент glTextureSubImage2D. И делать резидентной такую текстуру тоже нельзя.
iw4nna.rock
> И делать резидентной такую текстуру тоже нельзя.
такс, а это уже интересно. И как мне ее потом "забиндить" чтобы линейную глубину получить?
iw4nna.rock
> для текстур под запись не нужно передавать выделенную память. Нужно передать (void*)0 в последний аргумент glTextureSubImage2D.
Меня терзают смутные сомнения.
barnes
> как мне ее потом "забиндить"
от сердца отрываю:
void bind (unsigned int slot ) { glActiveTexture( GL_TEXTURE0+slot); glBindTexture( GL_TEXTURE_2D, id); glUniform1i( PROGRAM::p->CTEX[slot], slot); }
> Меня терзают смутные сомнения
не сомневайтесь