.[ ČeskéHry.cz ].
Render to texture neuklada nic pri vetsim rozliseni

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 11. červen 2008, 12:13:24    Předmět: Render to texture neuklada nic pri vetsim rozliseni Odpovědět s citátem

Ahoj. Po delsi dobe si zase nevim rady s problemem.

Pouzivam rendering do textury. Vsechno chodilo v pohode, az dokud jsem neupgradoval ovladace (forceware 93.71 -> 175.16 Smile )
Od te chvile se mi do textury neulozi zhola nic, pokud ma velikost vetsi nez 256x256.
Grafika je GF7600GST.
Vytvoreni textur:
kód:

            tempBuffer3 = new Texture(device, this.width, this.height, 1, Usage.RenderTarget,
                                        Format.A32B32G32R32F, Pool.Default);
            buffer = new Texture(device, this.width, this.height, 1, Usage.Dynamic,
                        Format.A32B32G32R32F, Pool.SystemMemory);

Vykresleni:
kód:
            device.SetRenderTarget(0, output.GetSurfaceLevel(0));
            device.Clear(ClearFlags.Target, Color.Gray, 0, 0);

            device.RenderState.CullMode = Cull.None;
            device.RenderState.ZBufferEnable = false;
            device.VertexFormat = CustomVertex.TransformedTextured.Format;
            CustomVertex.TransformedTextured[] verts = new CustomVertex.TransformedTextured[] {
                new CustomVertex.TransformedTextured(0,0,0.3f,1,0,0),
                new CustomVertex.TransformedTextured(width,0,0.3f,1,1,0),
                new CustomVertex.TransformedTextured(0,height,0.3f,1,0,1),

                new CustomVertex.TransformedTextured(width,0,0.3f,1,1,0),
                new CustomVertex.TransformedTextured(width,height,0.3f,1,1,1),
                new CustomVertex.TransformedTextured(0,height,0.3f,1,0,1)
                };
            device.BeginScene();
            effect.Begin(FX.None);
            effect.BeginPass(0);

            device.DrawUserPrimitives(PrimitiveType.TriangleList, 2, verts);

            effect.EndPass();
            effect.End();
            device.EndScene();

Stazeni do pameti:
kód:

            device.GetRenderTargetData(tempBuffer3.GetSurfaceLevel(0), buffer.GetSurfaceLevel(0));
            GraphicsStream str = buffer.LockRectangle(0, LockFlags.DoNotWait);
            float[, ,] data = (float[, ,])str.Read(typeof(float), new int[] { height, width, 4 });
            buffer.UnlockRectangle(0);

V pixel shaderu je jedina instrukce, ktera vrati konstantni barvu, ale pri vetsim rozliseni je vysledek vzdycky 0,5 zapsane pri Clearu
netusi nekdo v cem by mohl byt problem? Nebo aspon kde hledat?
Diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MePHyst0



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: SVK/CZK

PříspěvekZaslal: 11. červen 2008, 13:01:18    Předmět: Odpovědět s citátem

ako prve ma napadlo ci kontrolujes ci vies taku textury vytvorit ako rendertarget?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 11. červen 2008, 14:18:33    Předmět: Odpovědět s citátem

Jestli myslis flag Usage.RenderTarget, tak ten tam mam.
A jestli myslis vytvorit surface primo pres Device.CreateRenderTarget, tak to jsem tedko zkousel, ale chova se to porad stejne.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. červen 2008, 15:09:28    Předmět: Odpovědět s citátem

Proč tam dáváš Pool.SystemMemory? Pokud vím, pro render target by mělo být Pool.Default. Nebo do té druhé nerenderuješ?
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 11. červen 2008, 15:21:55    Předmět: Odpovědět s citátem

Do te druhe to potom jenom prenasim pomoci Device.GetRenderTargetData. RanderTarget se mi snad este nikdy nepodarilo locknout.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 17. červen 2008, 10:08:00    Předmět: Odpovědět s citátem

Takze jestli se nekdy nekomu stane podobna vec. Tak me pomohlo predelat to podle samplu na DOF a pouzit RenderToSurface

kód:

renderToSurface = new RenderToSurface(device, this.width, this.height,
                                        Format.A32B32G32R32F, false, DepthFormat.Unknown);

a potom zamenit Device.BeginScene/EndScene za ekvivalentni metody tyhle tridy
kód:

renderSurf.BeginScene(output.GetSurfaceLevel(0));
//vykreslovani...
renderSurf.EndScene(Filter.None);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna