Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
Tarih: Mon Jul 25, 2005 6:50 pm Mesaj konusu: GLSL 'de Sampler2D |
|
|
Selam millet ...
Tek Image üzerine Shader uyguladıgımda herhangi bir sorun olmadan calisiyoo..
//Texture ID lerini tutuyor..
texture2D ShadowTexID,
texture2D BgTexID
diyelimki
Sampler2D baseMap
Sampler2D baseMap1 var shaderda
ben baseMap ShadowTexID
baseMap1 bgTexID yi baglamak istiyorum bunu nasıl
basaracagım ...
yani hangi OpenGL kodları bu ikisi arasındaki baglantıyı yapıyor.. |
|
Başa dön |
|
|
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
|
Başa dön |
|
|
stroma
Kayıt: Mar 31, 2003 Mesajlar: 169
|
Tarih: Mon Jul 25, 2005 7:12 pm Mesaj konusu: |
|
|
anladığım kadarı ile bir shader içinde 2 texture unit kullanacaksın? bu işlem için programın init kısımda:
Kod: |
GLint texLoc;
GLhandleARB prog;
setshader(prog, vs, fs); //programı ayarladık, complie, link felan ettik..
texLoc = glGetUniformLocationARB(prog, "ShadowTex"); //shader içindeki ismi "ShadowTex" olsun
glUniform1iARB(texLoc, 0); //0. texture unit senin olsun
texLoc = glGetUniformLocationARB(prog, "BgTex");
glUniform1iARB(texLoc, 1); //1. texture unit senin olsun
|
yaptıktan sonra real time kısımda:
Kod: |
glUseProgramObjectARB(prog);
glActiveTexture(GL_TEXTURE0); //0. unit
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, ShadowTexID); // bu unit için kullanacağımız kaplamamızın id si
glActiveTexture(GL_TEXTURE1); //1.unit
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, BgTexID);
RenderHede();
|
bu kadar basit... kolay gele. |
|
Başa dön |
|
|
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
Tarih: Tue Jul 26, 2005 8:26 am Mesaj konusu: |
|
|
Alıntı: |
glUseProgramObjectARB(prog);
glActiveTexture(GL_TEXTURE0); //0. unit
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, ShadowTexID); // bu unit için
kullanacağımız kaplamamızın id si
texLoc = glGetUniformLocationARB(prog, "ShadowTex"); //shader içindeki ismi "ShadowTex" olsun
glUniform1iARB(texLoc, 0); //0. texture unit senin olsun
glActiveTexture(GL_TEXTURE1); //1.unit
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, BgTexID);
texLoc = glGetUniformLocationARB(prog, "BgTex");
glUniform1iARB(texLoc, 1); //1. texture unit senin olsun
RenderHede(); |
Kodu yukarıdaki sekilde duzelttim yoksa Uniform Bind'dan sonra vermessen Calismadı bende |
|
Başa dön |
|
|
stroma
Kayıt: Mar 31, 2003 Mesajlar: 169
|
Tarih: Tue Jul 26, 2005 10:26 am Mesaj konusu: |
|
|
bende belirttiğim şekilde çalışıyor. zaten location lar ve unit adresleri hep hazırlık kısımda hesaplanır. real time içinde location almak çok performans kaybettirir. başka bir yerde hata olmasın? bazı yerleri global yaparak denemeni tavsiye ederim (pek alaka göremedim ama bazen işe yarıyor ) veya çalışmayan kodu yazabilir misin? |
|
Başa dön |
|
|
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
Tarih: Tue Jul 26, 2005 11:15 am Mesaj konusu: |
|
|
Simdide soyle bir sorunla karsılasiyorum ...
Yukarıdaki sistem birdefa
rendering yapılırsa ve Swap sonra ekrana basma işlemi guzelce gerceklesiyor...
ama sonraki Rendering ve Swap larda ekran simsiyah cıkıyorr... |
|
Başa dön |
|
|
stroma
Kayıt: Mar 31, 2003 Mesajlar: 169
|
Tarih: Tue Jul 26, 2005 12:53 pm Mesaj konusu: |
|
|
büyük ihtimal depth buffer veya projeksiyon matrisleri ile alakalıdır diye düşünüyorum. shader kullanmayan debug modeller çiz aynı yerlere. ana döngünü kontrol et. çizimden sonra değişen ne ayarlar var diye bak. |
|
Başa dön |
|
|
Darklight
Kayıt: Oct 31, 2002 Mesajlar: 185 Nereden: Ankara
|
Tarih: Tue Jul 26, 2005 7:16 pm Mesaj konusu: |
|
|
Yok bu dediklerini onceden denemistim.. Shader kapattıgın an sistem renderlemesi normal sekilde gerceklesmekte...
Birde sriverlardan olabilecegini dusunmeye basladım.. Cunku ATI'nin bazı uygulamalarıda calişmamakta ...Sihay ekran cıkmakta.. Cok garip bir problem ilginc...
Hiç olmassa RenderTarget PBuffer yontemleri ile işi halledecegiz.. Simdilik.. Gecici bir cozum uretmem gerekecek ... |
|
Başa dön |
|
|
|