2010-09-03 12 views
6

Bir köşe gölgelendirici ve bir parça gölgelendirici kombinasyonuyla bazı GPGPU hesaplamaları yapmak için OpenGL kullanıyorum. Bir görüntü üzerinde farklı ölçekte hesaplamalar yapmam gerekiyor. Nesilleri otomatik ve donanım hızlandırılabildiğinden dolayı mipmap kullanmak istiyorum. Ancak, parça gölgelendiricideki mipmap dokularına erişemiyorum.Bir GLSL parçalı gölgelendiricide, belirli bir mipmap düzeyinde dokuya nasıl erişilir?

Otomatik mipmap oluşturma özelliğini etkinleştirdim: glTexParameteri (GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

Gölgede hiç zaman kaybetmeden texture2DLod kullanmayı denedim, sadece normal doku vermeye devam etti. Ayrıca ana programda glTextureParameteri (GL_BASE_LEVEL, X) kullanmayı denedim ve hiçbir şey değiştirmedi.

Bunu nasıl yaparsınız?

Linux kullanıyorum. Grafik kartım oldukça eski bir Nvidia Quadro. Here, desteklenen tüm uzantılara sahip glxinfo çıkışımdır.

+0

Sorunuzun cevabını "yararlı ve açık" olduğu için söylüyorum, ama herşeyi doğru yapıyor gibisiniz. GltextureSize (örnekleyici, lod) ne diyor? (Parça gölgelendiricinizde) – Calvin1602

+0

Benim için böyle bir işlev yok. Kartımın çok eski olduğunu düşünüyorum (sadece kontrol ettim ve GLSL sürümü GL_ARB_shading_language_100). Bu çok açıklamak istiyorum ama gölgelendirici neden desteklemediyse * Lod varyantını kabul etmiyor anlamıyorum ... – Jim

+0

Neden glTextureParameteri (GL_BASE_LEVEL, X) ve glTextureParameteri (GL_MAX_LEVEL, X) anlamıyorum) çağrıların da etkisi yoktur. Bu GLSL ile ilgili değil ... Şu anda oldukça kafam karıştı. – Jim

cevap

3
gvec4 textureLod (gsampler1D sampler, float P, float lod) 
gvec4 textureLod (gsampler2D sampler, vec2 P, float lod) 
gvec4 textureLod (gsampler3D sampler, vec3 P, float lod) 
gvec4 textureLod (gsamplerCube sampler, vec3 P, float lod) 
float textureLod (sampler1DShadow sampler, vec3 P, float lod) 
float textureLod (sampler2DShadow sampler, vec3 P, float lod) 
gvec4 textureLod (gsampler1DArray sampler, vec2 P, float lod) 
gvec4 textureLod (gsampler2DArray sampler, vec3 P, float lod) 
float textureLod (sampler1DArrayShadow sampler, vec3 P, float lod) 

Bu yerleşiklerden birini denediniz mi? Ayrıca lod bir şamandıra tipi olmak zorundadır. GLSL derleyicisini hangi hatalar/uyarılar bildiriyor?

+0

Merhaba, uzun gecikme için özür dilerim. Texture2DLod işlevini denedim. Tuhaf olan şey, 'lod' için verdiğim değer ne olursa olsun, döndürülen değer, standart texture2D aramasıyla tamamen aynıdır. Gölgelendirici derlemesinde hiçbir hata veya uyarı üretilmez. – Jim

1

deneyin: Eğer doku bağlamak sonra

glGenerateMipmapEXT(GL_TEXTURE_2D); 

. (Ve tabii oluşturulmasını yapmadan önce)

glTexParameteri-GL_GENERATE_MIPMAP ... Bence MfG Digi

1

GLSL 1.20 spesifikasyonu (bölüm 8.7) fragmanı gölgelendiriciler kendi mipmap seviyesini seçmek bildiren onaylanmaz (ve yani doku * Lod fonksiyonu sadece köşe gölgelendiricilerde mevcuttur). Bir şey varsa, mipmap düzeyini değiştirmek için bias parametresini Lod olmayan varyantlarda kullanabilirsiniz, ancak kartın sizin için önceden hesapladığı değere göre değişebilir.

GLSL'nin son sürümlerinin bunu değiştirip değiştiremeyeceğini bilmiyorum.

+0

Gerçekten de, bu sorunun ilk cevabının gösterdiği gibi değişti. –