Warsztat.GD

Programowanie => Platformy => Platformy mobilne => Wątek zaczęty przez: .:NOXY:. w Listopad 18, 2011, 16:07:11

Tytuł: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: .:NOXY:. w Listopad 18, 2011, 16:07:11
Pisze tego posta bo natknolem sie na bardzo ciekawy case z shaderami ktory moze wam spedzic sen z powiek otoz:

mamy taki prosty shader:

VERT:
attribute vec4 position;
attribute vec2 coord;

uniform mat4 mvp;

varying vec2 tcoord;
uniform lowp vec4 tpos;

void main()
{
    tcoord.st = coord.st;
    tcoord.s += tpos.x*tpos.z;
    tcoord.t += tpos.y*tpos.w;
   
gl_Position = mvp * position;
   
}


FRAG:


uniform lowp sampler2D tex;
varying lowp vec2 tcoord;
uniform lowp vec4 rcolor;

void main()
{
    lowp vec4 outColor = texture2D(tex,tcoord.st);
    gl_FragColor = (outColor * rcolor.a) * (rcolor * rcolor.a);
}


Kod nie jest jakos specialnie skomplikowany, shader jest po to zeby uzywac tilesow w atlasie itd

Powiedzmy ze podamy taki vektor= vec4(1,3,0.25,0.25);
I teraz pytanie:
1. Czy shader sie skompiluje?
2. Czy bedzie dzialac z takimi danymi?
Odpowiedz:

iPhone3GS = TAK, TAK
iPhone4 = TAK, TAK
iPhone4S = TAK, NIE

Piwo dla tego kto powie dlaczego i czemu tak sie dzieje :) i co trzeba poprawic.

P.S. Nie szukam rozwiazania,znam je podaje to jako przyklad aby oduczyc sie zlych nawykow bo iP4S jest bardzo restrykcyjny w tych sprawach a sam sie nadzialem i szukalem dziury w calym przez 3 dni :)
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: PsichiX (ΨΧΞ) w Listopad 18, 2011, 16:22:18
przez lowp? w ogole co to i po co?
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: .:NOXY:. w Listopad 18, 2011, 16:40:01
tak przez lowp teraz uzasadnij ;) ale dobrze ci dzwoni. Samo lowp to jedna z pecyzji kotra sie stosuje w OpenglES 2.0 sluzy glownie do no oszczednosci pamieci / obliczen.
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: Dab w Listopad 18, 2011, 16:40:45
varying vec2 tcoord ma różną precyzję w VS i FS, ale linker powinien coś o tym wspomnieć.
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: .:NOXY:. w Listopad 18, 2011, 16:45:43
Pudlo akurat nie ta linijka Tomku :) z konwersja z VS do FS to sobie chlopak juz poradzi
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: Liosan w Listopad 18, 2011, 16:59:10
tcoord.s += tpos.x*tpos.z;A tu sobie poradzi? :)

Liosan
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: .:NOXY:. w Listopad 18, 2011, 17:16:09
@Liosan: bardzo blisko ale tez pudlo :)
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: .:NOXY:. w Listopad 19, 2011, 14:00:13
Widze ze nikt sie nie kwapi z odpowiedzia a szkoda bo temat ciekawy zla linijka jest oczywiscie:


uniform lowp vec4 tpos;

nalezy ja zamienic na:

uniform mediump vec4 tpos;

Na tym etapie dostaniemy smieci coordy wylatuja juz do pixel shadera w postaci [0..1] wiec nie ma mowy o problemie ale wlasnie podanie np vectora tpos = vec4(1.0,3.0,0.25,0.25); spowoduje ze na iphonie 4S dostaniemy vec4(1.0,smieci,0.25,0.25) dlatego tylko ze lowp ma zakres w tym wypadku [-2..2] i o ile starsze iPhony jakos sobie z tym bugiem radzily (o zgrozo nie pokazywalo nawet warninga!) tak iP4S zrobi wam instant fuckup :)
Tytuł: Odp: [iOS] [iPhone4S] OpenglES2.0
Wiadomość wysłana przez: Krzysiek K. w Listopad 19, 2011, 14:14:01
Cytuj
vectora
Po polsku "wektor" pisze się przez "w" oraz "k".