Глюк компилятора
Участников: 3
Страница 1 из 1
Глюк компилятора
При вызове функции программа выдаёт ошибку.
Если перед GoTo AlphaTex поставить LoadResult.ImageData = Alpha ,а в AlphaTex альфу заменить на
LoadResult.ImageData , то всё идёт нормально. Есть анологичная функция, которая работает без изменений:
- Код:
type structTexture
imageData as ubyte ptr
bpp as uinteger
texwidth as uinteger
height as uinteger
texID as uinteger
textype as uinteger
end type
function ImportTGA( byval FileName as string, byval flags as integer, byval usealpha as string, byval ext1 as string, byval ext2 as string, byval ext3 as string ) as uinteger
dim LoadResult as structTexture
dim LoadTGAResult as integer
dim Alpha as byte ptr
dim tex as uinteger
dim a as integer
dim as string atest1, atest2, atest3
dim as integer a2test1, a2test2, a2test3
LoadTGAResult = LoadTGA( @LoadResult, FileName )
glGenTextures 1, @tex
glBindTexture GL_TEXTURE_2D, tex
if not LoadTGAResult = 0 then
if lcase(usealpha) = "standart" then
GoTo NoAlphaTex
elseif lcase(usealpha) = "picture" then
Alpha = LoadAlpha( ext1, ext2 )
if Alpha <> 0 and LoadResult.texwidth = AlphaTexX and LoadResult.height = AlphaTexY then
for a=0 to LoadResult.texwidth*LoadResult.height - 1
Alpha[4*a] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)] '' R
Alpha[4*a+1] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)+1] '' G
Alpha[4*a+2] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)+2] '' B
next
GoTo AlphaTex
else
GoTo NoAlphaTex
end if
elseif lcase(usealpha) = "point" then
Alpha = allocate( 4*LoadResult.texwidth*LoadResult.height)
for a=0 to LoadResult.texwidth*LoadResult.height - 1
Alpha[4*a] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)] '' R
Alpha[4*a+1] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)+1] '' G
Alpha[4*a+2] = LoadResult.ImageData[a*(LoadResult.bpp \ 8)+2] '' B
atest1 = Alpha[4*a]
atest2 = Alpha[4*a+1]
atest3 = Alpha[4*a+2]
a2test1 = asc(atest1)
a2test2 = asc(atest2)
a2test3 = asc(atest3)
if a2test1 = val(ext1) and a2test2 = val(ext2) and a2test3 = val(ext3) then
Alpha[4*a+3] = 0
else
Alpha[4*a+3] = -1
end if
next
GoTo AlphaTex
end if
end if
exit function
NoAlphaTex:
if flags = 1 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,LoadResult.bpp \ 8,LoadResult.texwidth, LoadResult.height,0,LoadResult.textype,GL_UNSIGNED_BYTE,LoadResult.ImageData)
end if
if flags = 2 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps(GL_TEXTURE_2D,LoadResult.bpp \ 8, LoadResult.texwidth, LoadResult.height, LoadResult.textype,GL_UNSIGNED_BYTE,LoadResult.ImageData)
end if
if flags = 3 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,LoadResult.bpp \ 8, LoadResult.texwidth, LoadResult.height, LoadResult.textype,GL_UNSIGNED_BYTE,LoadResult.ImageData)
end if
if flags = 4 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,g_nMaxAnisotropy-0.1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,LoadResult.bpp \ 8, LoadResult.texwidth, LoadResult.height, LoadResult.textype,GL_UNSIGNED_BYTE,LoadResult.ImageData)
end if
function = tex
AlphaTex:
if flags = 1 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,LoadResult.texwidth, LoadResult.height,0,GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
if flags = 2 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8, LoadResult.texwidth, LoadResult.height, GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
if flags = 3 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8, LoadResult.texwidth, LoadResult.height, GL_RGBA,GL_UNSIGNED_BYTE,LoadResult.Alpha)
end if
if flags = 4 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,g_nMaxAnisotropy-0.1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8, LoadResult.texwidth, LoadResult.height, GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
function = tex
end function
Если перед GoTo AlphaTex поставить LoadResult.ImageData = Alpha ,а в AlphaTex альфу заменить на
LoadResult.ImageData , то всё идёт нормально. Есть анологичная функция, которая работает без изменений:
- Код:
type BITMAP_RGBImageRec FIELD = 1
sizeX as integer
sizeY as integer
buffer as ubyte ptr
end type
function ImportBMP( byval FileName as string, byval flags as integer, byval usealpha as string, byval ext1 as string, byval ext2 as string, byval ext3 as string ) as uinteger
dim LoadResult as BITMAP_RGBImageRec ptr
dim Alpha as byte ptr
dim tex as uinteger
dim a as integer
dim as string atest1, atest2, atest3
dim as integer a2test1, a2test2, a2test3
glGenTextures(1,@tex)
glBindTexture(GL_TEXTURE_2D,tex)
LoadResult=LoadBMP( FileName )
if not LoadResult = 0 then
if lcase(usealpha) = "standart" then
GoTo NoAlphaTex
elseif lcase(usealpha) = "picture" then
Alpha = LoadAlpha( ext1, ext2 )
if Alpha <> 0 and LoadResult->sizeX = AlphaTexX and LoadResult->sizeY = AlphaTexY then
for a=0 to LoadResult->sizeX*LoadResult->sizeY - 1
Alpha[4*a] = LoadResult->buffer[a*3] '' R
Alpha[4*a+1] = LoadResult->buffer[a*3+1] '' G
Alpha[4*a+2] = LoadResult->buffer[a*3+2] '' B
next
GoTo AlphaTex
else
GoTo NoAlphaTex
end if
elseif lcase(usealpha) = "point" then
Alpha = allocate( 4*LoadResult->sizeX*LoadResult->sizeY)
for a=0 to LoadResult->sizeX*LoadResult->sizeY - 1
Alpha[4*a] = LoadResult->buffer[a*3] '' R
Alpha[4*a+1] = LoadResult->buffer[a*3+1] '' G
Alpha[4*a+2] = LoadResult->buffer[a*3+2] '' B
atest1 = Alpha[4*a]
atest2 = Alpha[4*a+1]
atest3 = Alpha[4*a+2]
a2test1 = asc(atest1)
a2test2 = asc(atest2)
a2test3 = asc(atest3)
if a2test1 = val(ext1) and a2test2 = val(ext2) and a2test3 = val(ext3) then
Alpha[4*a+3] = 0
else
Alpha[4*a+3] = -1
end if
next
GoTo AlphaTex
end if
end if
'function = tex
exit function
NoAlphaTex:
if flags = 1 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,3,LoadResult->sizeX,LoadResult->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,LoadResult->buffer)
end if
if flags = 2 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps(GL_TEXTURE_2D,3,LoadResult->sizeX,LoadResult->sizeY,GL_RGB,GL_UNSIGNED_BYTE,LoadResult->buffer)
end if
if flags = 3 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,3,LoadResult->sizeX,LoadResult->sizeY,GL_RGB,GL_UNSIGNED_BYTE,LoadResult->buffer)
end if
if flags = 4 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,g_nMaxAnisotropy-0.1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,3,LoadResult->sizeX,LoadResult->sizeY,GL_RGB,GL_UNSIGNED_BYTE,LoadResult->buffer)
end if
function = tex
AlphaTex:
if flags = 1 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,LoadResult->sizeX,LoadResult->sizeY,0,GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
if flags = 2 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8,LoadResult->sizeX,LoadResult->sizeY,GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
if flags = 3 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8,LoadResult->sizeX,LoadResult->sizeY,GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
if flags = 4 then
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,g_nMaxAnisotropy-0.1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8,LoadResult->sizeX,LoadResult->sizeY,GL_RGBA,GL_UNSIGNED_BYTE,Alpha)
end if
function = tex
end function
Miha- Сообщения : 1
Дата регистрации : 2009-08-19
Re: Глюк компилятора
ну во первых надо бы написать че за ошибка, или даже лучше дать кусок исходника, который можно откомпилить, и самому посмотреть, че там происходит, во вторых Alpha является зарезервированным словом, хоть оно и используется в определенном контексте, в других слчаях вполне возможно оно хранит какието свои значения, всетаки я стараюсь не давать такие имена
ЗЫ: за два с половиной года я еще ни разу не видел глюк компилятора, всегда это был либо мой, либо глюк системы
ЗЫ: за два с половиной года я еще ни разу не видел глюк компилятора, всегда это был либо мой, либо глюк системы
Re: Глюк компилятора
Исходник из первого поста содержит оператор goto и это уже не кашерно.
От этой пакости нужно срочно избавиться!
Наткнувшись на goto я не стал даже ломать голову дальше.
От этой пакости нужно срочно избавиться!
Наткнувшись на goto я не стал даже ломать голову дальше.
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|