játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5484
FZoli:    4893
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2526

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2196
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] > 2 < [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [82]
ddbwo - Tag | 1654 hsz       Online status #210898   2017.02.01 20:14 GMT+1 óra  
Idézet
Asylum :
A point cloud hogy jön a bloomhoz?



Csak valami vec2 array-t neveztem felhőnek, mivel véletlen pontokat kéne generálnom egy körön belül. kb 32-t. Na mindegy, megírom azt, ha nincs egy jó array.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Asylum - Törzstag | 5484 hsz       Online status #210896   2017.02.01 20:09 GMT+1 óra  
Qrvára nem tűnik el (most nem tudok shotot csinálni, majd holnap).

A point cloud hogy jön a bloomhoz?
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
ddbwo - Tag | 1654 hsz       Online status #210895   2017.02.01 20:02 GMT+1 óra  
GL 3.3-am van.

Jól néz ki innen. Csak az a gond ezekkel, hogy színekkel már eltűnik az egész. Ezért is hanyagolom a sima ssao-t.

---
Van vmi tipp "pont felhőre" bloom shaderhez? ki akarom azt is javítani, mert most kicsit csúnya, amit rögtönöztem.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Asylum - Törzstag | 5484 hsz       Online status #210893   2017.02.01 19:44 GMT+1 óra  
GLSL 150 kell csak (és GL 3.2).
A fő problémát amúgy sikerült megoldani, még egy apróság van amit ki kell tenyésztenem.

C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
ddbwo - Tag | 1654 hsz       Online status #210891   2017.02.01 15:47 GMT+1 óra  
Én ránéznék, attól függően, hogy milyen shader model kell hozzá. Asszem van glsl 330-am. De azt se teszteltem még.
Persze segíteni nem biztos, hogy tudok.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Asylum - Törzstag | 5484 hsz       Online status #210877   2017.01.31 15:34 GMT+1 óra  
A GTAO-val kissé zsákutcában vagyok...ha nyitok neki egy projektet, akkor lenne kedvetek/időtök beszállni? (több szem többet lát alapon)

Az alapokhoz már megírtam a cikket, de jelenleg olyan pontatlanságokkal küzdök, ami gyak. lehetetlen hogy előálljon.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #210814   2017.01.18 12:42 GMT+1 óra  
Megpróbálhatnál simán kirajzolni egy fullscreen quadot egyetlen textúrával és egy nagyon egyszerű shaderrel. Ha az működik, akkor a shaderrel lesz a gond, ha nem, akkor működik, akkor pedig lehet tovább kutatni.

Amúgy ahogy Asylum is mondta, glEnable nem kell, ha shadert használsz.

   
Asylum - Törzstag | 5484 hsz       Online status #210812   2017.01.18 12:36 GMT+1 óra  
Kód:
GL.Enable(EnableCap.Texture2D);
GL.ActiveTexture(TextureUnit.Texture0);


Ez itt fordítva van (bár ugyanazt csinálja), de ha nincs shader, akkor minden stage-et külön kell engedélyezni (ha meg van shader, akkor nem kell glEnable)

Kód:
// ha NINCS shader
GL.ActiveTexture(TextureUnit.Texture0);
GL.Enable(EnableCap.Texture2D);

GL.ActiveTexture(TextureUnit.Texture1);
GL.Enable(EnableCap.Texture2D);

// stb.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
gopher - Törzstag | 497 hsz       Online status #210811   2017.01.18 12:05 GMT+1 óra  
Ha jol latom, itt ugyanez a problema: http://stackoverflow.com/questions/12936188/opentk-texture-showing-up-full-black

Probalj hibat kiiratni texture betoltes es kirajzolas utan is, hatha van valami (ezt javasoljak ott is) :
Kód:
#if DEBUG GLError error = glGetError(); if (error != GLError.NO_ERROR) { Console.WriteLine("Error {0} occured at {1}", error, "Location"); } #endif


De akar a shader-rel is lehet gond. Esetleg unsigned helyett signed, vagy float van atadva, ahol nem az kene, es linuxnal nem volt gond, itt igen.. Nem tudom, tippelgetek csak
   
Bukta - Tag | 308 hsz       Online status #210809   2017.01.18 10:02 GMT+1 óra  
Tuti, de most odáig jutottam, hogy a textura engedélyezéssel/tiltással van a baj. Van Shaderem is multitexturával, 5 db texturával, amit terrain előtt betöltök aztán render után unbindelek mindent és utánna renderelem a modelleket. Megint bindelek render, unbind. Na és itt van valami baj a bind/unbind-nél. Van hogy látszanak a modellek legalábbis ha nem unbindelem a terrain texturáit.
Ezek a fv-ek vannak (A Terrainbol vettem ki, de bind,unbind a modelleknél is igy néz ki):
Kód:
public void BindBuffers() {
   GL.BindBuffer(BufferTarget.ArrayBuffer, VBOid[0]);
   GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 0);
   GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 3 * sizeof(float));
   GL.VertexAttribPointer(2, 2, VertexAttribPointerType.Float, false, Vertex.SIZE_IN_BYTE, 6 * sizeof(float));
   GL.BindBuffer(BufferTarget.ElementArrayBuffer, VBOid[1]);
}
public void BindTextures() {
   GL.Enable(EnableCap.Texture2D);
   GL.ActiveTexture(TextureUnit.Texture0);
   GL.BindTexture(TextureTarget.Texture2D, DirtTexture);
   GL.ActiveTexture(TextureUnit.Texture1);
   GL.BindTexture(TextureTarget.Texture2D, GrassTexture);
   GL.ActiveTexture(TextureUnit.Texture2);
   GL.BindTexture(TextureTarget.Texture2D, SandTexture);
   GL.ActiveTexture(TextureUnit.Texture3);
   GL.BindTexture(TextureTarget.Texture2D, StoneTexture);
   GL.ActiveTexture(TextureUnit.Texture4);
   GL.BindTexture(TextureTarget.Texture2D, BlendMap);
}
public void UnBindTextures() {
   GL.BindTexture(TextureTarget.Texture2D, 0);
   GL.Disable(EnableCap.Texture2D);
}
public void UnBindBuffers() {
   GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
   GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
}


Kód:
terrain.BindBuffers();
terrain.BindTextures();
GL.DrawElements(PrimitiveType.Triangles, localizator.Area.TriangleCount, DrawElementsType.UnsignedInt, IntPtr.Zero);
terrain.UnBindTextures();
terrain.UnBindBuffers();
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
gopher - Törzstag | 497 hsz       Online status #210806   2017.01.18 08:35 GMT+1 óra  
@Bukta: a Bitmap-ban tuti betoltodik az adat, nem lehet hogy path problema van? Video driver rendben van?
   
Bukta - Tag | 308 hsz       Online status #210805   2017.01.18 07:44 GMT+1 óra  
Hali!

Elővettem az OpenGL-es projektemet - amit közbe-közbe szoktam fejlesztgetni. Eddig Ubuntu alatt csináltam, de most átjöttem win-re a VS2012 miatt. Na most olyan problémám van, hogy win-en nem jelenik meg az 1x16-os Bitmap-ból krehált textúra -ami egy ProgressBar-é. Meg a *.obj fájlokat se rajzolja ki, pedig ott már nagyobb mint 64x64-es textura van (mondjuk az 5x16os textura már megjelenik a ProgressBaron). Magában a kódban nincs logikai hiba, mert egérrel működik a kijelölés szóval ott vannak a modellek csak épp nem látni őket. Viszont a terrain faxán megjelenik, meg úgy a Controlok is csak ez az 1x16os textura nem. Mi lehet a baj? Van valami win speckó dolog amit be kell állítani? Vagy valamit elcsesztem, nem állítottam be és az ubuntu cseszett rá a win meg azt mondja h "megállj van!"?

Itt a textúra betöltő:
Kód:
public static Texture2D CreateTexture2D(Bitmap bmp) {
   int id = GL.GenTexture();
   GL.BindTexture(TextureTarget.Texture2D, id);
   BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
   GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
   bmp.UnlockBits(data);
   GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
   GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
   GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
   GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);

   return new Texture2D(id, bmp.Width, bmp.Height);
}


Ja igen C# mert OpenTK ami OpenGL wrapper, de mindig opengl-t írok be google-ba, ugyanaz a megoldás még ha c++-os a kód akkor is, már ha van valami gond. És általában OpenGLből nem tudok valamit és azért rossz. (Ami c#-ba GL.GenBuffer az ogl-be glGenBuffer ennyi a különbség.

Ezt a hozzászólást Bukta módosította (2017.01.18 08:03 GMT+1 óra, 909 nap)
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
Asylum - Törzstag | 5484 hsz       Online status #210790   2017.01.13 19:13 GMT+1 óra  
Bár tudom h kód önmagában nem sokat segít, de bemásolom. Egyébként nem vagyok már annyira szigorú az enginemmel kapcsolatban, szóval tudok adni teljes forráskódot igény esetén (csak el kell magyaráznom a fordítást).

Kód:
void qWin32Application::AdjustWindow(quint32& width, quint32& height)
{
    RECT    realrect;
    RECT    sourcerect;
    RECT    targetrect;
    LONG    screenwidth     = workarea.right - workarea.left;
    LONG    screenheight    = workarea.bottom - workarea.top;
    float    ratio          = (float)width / (float)height;

    GetWindowRect(hwnd, &sourcerect);
    DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &realrect, sizeof(RECT));

    LONG windowwidth    = realrect.right - realrect.left;
    LONG windowheight   = realrect.bottom - realrect.top;
    LONG errorwidth     = windowwidth - (sourcerect.right - sourcerect.left);
    LONG errorheight    = windowheight - (sourcerect.bottom - sourcerect.top);

    if( windowwidth > screenwidth )
    {
        windowwidth = screenwidth;
        windowheight = (LONG)floor(windowwidth / ratio);
    }

    if( windowheight > screenheight )
    {
        windowheight = screenheight;
        windowwidth = (LONG)floor(windowheight * ratio);
    }

    // get back window bounds
    LONG targetwidth = windowwidth - errorwidth;
    LONG targetheight = windowheight - errorheight;

    targetrect.left     = (screenwidth - targetwidth) / 2;
    targetrect.top      = (screenheight - targetheight) / 2;
    targetrect.right    = (screenwidth + targetwidth) / 2;
    targetrect.bottom   = (screenheight + targetheight) / 2;

    MoveWindow(hwnd, targetrect.left, targetrect.top, targetwidth, targetheight, FALSE);
    GetClientRect(hwnd, &sourcerect);

    // update client area
    width = (quint32)(sourcerect.right - sourcerect.left);
    height = (quint32)(sourcerect.bottom - sourcerect.top);
}


Kód:
void qWin32Application::AdjustFrame(RECT& out, quint32 width, quint32 height, DWORD style)
{
    LONG screenwidth = workarea.right - workarea.left;
    LONG screenheight = workarea.bottom - workarea.top;

    out.left    = (qint32)(screenwidth - width) / 2;
    out.top     = (qint32)(screenheight - height) / 2;
    out.right   = (qint32)(screenwidth + width) / 2;
    out.bottom  = (qint32)(screenheight + height) / 2;

    AdjustWindowRectEx(&out, style, FALSE, 0);
}
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #210785   2017.01.10 17:42 GMT+1 óra  
Asylum: A lentebbi kódban az AdjustWindow mit csinál? Az AdjustFrame gondolom a rect-et állítja be a paraméterei alapján, utána pedig átméretezed az ablakot.

További apróság csak, hogy a fullscreen-re való állításkor csak az if (hrc) előtti rész különbözik, szóval elég annyit az if-else-be rakni gondolom.

   
proof88 - Törzstag | 530 hsz       Online status #210784   2017.01.10 15:35 GMT+1 óra  
Mivel egyébként is textúrába renderelem az egész jelenetet, így az ablak tényleges mérete nem számít, csak a textúráké.

De a képfelbontás az eredeti marad, tehát számít. Régebbi hardveren simán teljesitményt veszitesz vele. Bár nem tudom mi a célcsoport, de jobban jársz szerintem ha támogatod a rendes fullscreen-re váltást is.
   
Instalok - Tag | 607 hsz       Online status #210779   2017.01.09 13:19 GMT+1 óra  
Ja, nem a tiédre értettem, hanem amivel anno én próbálkoztam.
Köszi, megnézem majd!

   
Asylum - Törzstag | 5484 hsz       Online status #210778   2017.01.09 10:51 GMT+1 óra  
Akkor az egy régebbi verzió lehetett, mert a mostani tökéletesen működik. Kód (hosszú):

Kód:
void qWin32Application::Resize(quint32& width, quint32& height, bool fullscreen)
{
    RECT rect;
    DWORD style = WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;

    dimension.x = width;
    dimension.y = height;

    if( fullscreen )
        style |= WS_POPUP;
    else
        style |= WS_SYSMENU|WS_BORDER|WS_CAPTION|WS_MINIMIZEBOX; // |WS_MAXIMIZEBOX

    if( !fullscreen )
    {
        if( !windowed )
            ChangeDisplaySettings(NULL, 0);

        // w/fs -> w
        AdjustFrame(rect, width, height, style);

        SetWindowLong(hwnd, GWL_STYLE, style);
        SetWindowPos(hwnd, HWND_NOTOPMOST, rect.left, rect.top, rect.right - rect.left,
            rect.bottom - rect.top, SWP_FRAMECHANGED);

        AdjustWindow(width, height);
    }
    else
    {
        if( windowed )
        {
            SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, SWP_NOACTIVATE);
            SetWindowLong(hwnd, GWL_STYLE, style);
            SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED);

            // w -> fs
            if( hrc )
            {
                SetForegroundWindow(hwnd);
               
                devmode.dmSize = sizeof(DEVMODE);
                devmode.dmBitsPerPel = 32;
                devmode.dmPelsWidth = dimension.x;
                devmode.dmPelsHeight = dimension.y;
                devmode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

                if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&devmode, CDS_FULLSCREEN) )
                    Console().Error("qWin32Application::Resize(): Could not change display settings");
            }
        }
        else
        {
            // fs -> fs
            SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, 0);

            if( hrc )
            {
                SetForegroundWindow(hwnd);
               
                devmode.dmSize = sizeof(DEVMODE);
                devmode.dmBitsPerPel = 32;
                devmode.dmPelsWidth = dimension.x;
                devmode.dmPelsHeight = dimension.y;
                devmode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

                if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&devmode, CDS_FULLSCREEN) )
                    Console().Error("qWin32Application::Resize(): Could not change display settings");
            }
        }
    }

    windowed = !fullscreen;
}
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #210777   2017.01.09 10:15 GMT+1 óra  
Idézet
proof88 :
Ha fullscreen-t akar a user és nem desktop felbontást, akkor hogyan állítod át a képfelbontást?


Mivel egyébként is textúrába renderelem az egész jelenetet, így az ablak tényleges mérete nem számít, csak a textúráké.

Idézet
Asylum :
A korábbi demómban meg van csinálva rendesen;


Ja, anno én is próbálgattam, de voltak vele gondok: pl., ha egyszerre állítottam a fullscreen state-et meg a felbontást.

Idézet
Asylum :
Az ikonokat nem cseszi szét ha kilépés előtt visszaállítod az eredetit.


Pontosabban, ha visszaállítom akkor, amikor nem aktív az ablak (pl. alt-tab)

   
Asylum - Törzstag | 5484 hsz       Online status #210776   2017.01.09 08:59 GMT+1 óra  
Fullscreenben optimálisabban tud működni a grafikus api, cserébe ilyenekkel megküzdeni pl. dx9 alatt, hogy alt-tab esetén minden GPU erőforrás törlődik (device lost). A korábbi demómban meg van csinálva rendesen; ha beértem a munkahelyre mgenézem a kódot.

Az ikonokat nem cseszi szét ha kilépés előtt visszaállítod az eredetit.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Geri - Törzstag | 2196 hsz       Online status #210775   2017.01.08 23:45 GMT+1 óra  
régebben minden ezt használta, manapság viszont már nem szabad használni, csak ha az user a játék beállításaiban (ha van) KIFEJEZETTEN ezt kéri.

   
proof88 - Törzstag | 530 hsz       Online status #210774   2017.01.08 21:50 GMT+1 óra  
Ha fullscreen-t akar a user és nem desktop felbontást, akkor hogyan állítod át a képfelbontást? Szerintem kb az összes játék használja ezt a függvényt. Sőt még a frissítési frekvenciát is lehet vele állítani.
Azt nem tudom mit jelent hogy szétcseszi az ikonokat.
   
Instalok - Tag | 607 hsz       Online status #210773   2017.01.08 18:36 GMT+1 óra  
Nem nagyon találtam arról infót, hogy van-e értelme fullscreen módot használni. Itt van Windows-on a ChangeDisplaySettings amit mindenféle OGL tutorialban lehet látni. Van egyáltalán értelme használni? Általában csak szétcseszi az asztalon az ikonokat meg minden ilyesmi. Én személy szerint nem örülnék neki, ha a display device beállításait túrkálná egy játék.

Jelenleg csak annyit csinálok, hogyha fullscreent akar, hogy az ablakot átméretezem akkorára, amekkora a jelenlegi felbontása a monitornak, és beállítom, hogy ne legyen kerete. Van bármi előnye a másiknak ezzel szemben?

   
ddbwo - Tag | 1654 hsz       Online status #210767   2017.01.04 18:52 GMT+1 óra  
Éppen postprocessen dolgozom és lenne egy kérdésem. Hogy hasonlítom össze a depth texture mintáját az új adattal? A gl_Position z-je nem működik. De akkor mivel lehet összehasonlítani?

Jó, megtaláltam. gl_FragCoord.z.

Ezt a hozzászólást ddbwo módosította (2017.01.04 19:13 GMT+1 óra, 922 nap)
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
ddbwo - Tag | 1654 hsz       Online status #210761   2017.01.02 18:26 GMT+1 óra  
Jól van, ma újra ránéztem és észre vettem, hogy létezik egy ilyen is:
Kód:
    float colour[4] = {1.0f, 1.0f, 1.0f, 1.0f};
    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, colour);


azaz "a színe pedig fehér"...
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
ddbwo - Tag | 1654 hsz       Online status #210759   2017.01.01 18:17 GMT+1 óra  
biztos hogy clamp? mert a szélét kapja meg vele. csak az ifek segítenek.

Amúgy egy sima bf2-s árnyékon próbálkoztam orthoban a naptól nézve, ami elég ferde.
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Asylum - Törzstag | 5484 hsz       Online status #210758   2017.01.01 16:59 GMT+1 óra  
GL_CLAMP_TO_BORDER

http://darthasylum.blog.hu/2013/11/24/a_karbantartas_fontossaga

Idézet

Feltételezem mindenki eljutott odáig, hogy a shadowmap címzési módja GL_BORDER, a színe pedig fehér. Ennek ellenére a shadowmap körül fekete részek jelennek meg.

Kód:
float d = cpos.z / cpos.w;


Általában jó. Itt nem. Hiszen d simán a far plane mögé eshet, és akkor d <= sd nem teljesül, azaz árnyék keletkezik. A helyes megoldás:

Kód:
float d = saturate(cpos.z / cpos.w);


C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
ddbwo - Tag | 1654 hsz       Online status #210757   2017.01.01 15:14 GMT+1 óra  
azt hogy oldom meg szépen, hogy az ST-n kívülről vett minta ne legyen árnyék? Feltételvizsgálattal megtudom shaderben, de van rá "normális" megoldás is?

(nem CSM-hez, csak sima shadow mappinghoz)

Ezt a hozzászólást ddbwo módosította (2017.01.01 15:48 GMT+1 óra, 925 nap)
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Asylum - Törzstag | 5484 hsz       Online status #210752   2016.12.30 18:38 GMT+1 óra  
cascaded shadow maps
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
ddbwo - Tag | 1654 hsz       Online status #210750   2016.12.30 13:54 GMT+1 óra  
Találkozott valaki kültéri árnyékokkal? spot és pointlight megvan, de hogy rendereljek árnyékot egy hatalmas terepnek?
A Half-Life 2: Deathmatch promóció megszűnt! [B¤°
Kezdetben volék az üresség. Ám akkor a Struktúrfüggöny megteremté az Urat.
DrunkenDragon* Blackwolf
   
Instalok - Tag | 607 hsz       Online status #209704   2016.06.04 22:30 GMT+1 óra  
Nos, szerintem ez driver bug lehet, mert eddig mindenki másnál működött a dolog.
3257-testapp.zip

   
Instalok - Tag | 607 hsz       Online status #209703   2016.06.03 10:31 GMT+1 óra  
Nem is igazán tudom, hogy ez most WinAPI, vagy OpenGL probléma, de a helyzet a következő:

Működik:
- window size change
- window style and size change

Nem működik:
- window style change

Tehát ha van egy 1280x720-as client area ablakom windowed módban (azaz maga az ablak 1296x758 a keret miatt), majd átváltok borderless módba, szintén 1280x720-as mérettel (nincs keret, szóval maga az ablak is ekkora), tehát a client area nem változik (1280x720), akkor teljesen rossz az egész.

Olyan, mintha az ablaknak lenne egy újrarajzolatlan része, pontosan ott, ahol előtte a caption és border volt. Egyelőre a teszt kedvéért minden frame-ben hívok egy glViewport-ot és egy glClear()-t, hogy biztosan ne ezekkel legyen a gond:
Kód:
glViewport(0,0,1280,720)
glClearColor(1.000000,0.000000,0.000000,1.000000)
glClear(GL_COLOR_BUFFER_BIT)
wglSwapBuffers(FF0117F9)=true

Ha az ablaknak változik a mérete is, akkor működik a dolog. Kell még OpenGL esetén valamivel trükközni, amikor ilyesmit csinálok, vagy ez inkább WinAPI dolog lesz?

szerk.:
Na itt van a dolog, ami nem csinál semmit, így könnyebb megnézni, hogy mi nem jó.
3257-windowstylechange.zip
Stílusváltás F1, F2 billentyűkkel.

Ezt a hozzászólást Instalok módosította (2016.06.03 10:43 GMT+1 óra, ---)

   
Instalok - Tag | 607 hsz       Online status #209636   2016.05.22 08:46 GMT+1 óra  
Hehe, jópofa. Ha a shaderben egy define többször előfordul, akkor nem fog sírni, hogy multiple definition, vagy akármi, hanem simán lefordul. Azt hiszem írok egy saját preprocessort, úgyis kell az include-oláshoz.

   
Instalok - Tag | 607 hsz       Online status #209635   2016.05.21 19:10 GMT+1 óra  
De mondom, hogy kell, használom Olvasom a shaderben, meg használom hardwares tesztekhez. Amit küldtél képet, az már valószínűleg nem aktuális, legalábbis RenderDoc-ban nem láttam olyan esetet, hogy bindolva van a textúra és attacholva is van FBO-hoz, a lenti példát leszámítva. Az viszont jelenleg must have, mert kell. Ha nagyon nem lesz jó sok helyen, akkor jön a depth-copy és használom azt.

   
Asylum - Törzstag | 5484 hsz       Online status #209634   2016.05.21 14:46 GMT+1 óra  
bakker csak unbindold azt a szaros textúrát (akár létrehozol egy dummy 1x1-es feketét és azt használod 0 helyett)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209633   2016.05.21 11:54 GMT+1 óra  
Igen, kicsit félek tőle én is, hogy úgy általánosságban mi lesz. Hibát nem dob rá, és csak egy bool-t kell átírnom, hogy a depth copyt használja, szóval egyelőre így marad, aztán a gyakorlatban majd kiderül.

   
Asylum - Törzstag | 5484 hsz       Online status #209632   2016.05.21 10:27 GMT+1 óra  
duplatap... ezt a süti bugot nem akarjátok javítani?
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Asylum - Törzstag | 5484 hsz       Online status #209631   2016.05.21 10:27 GMT+1 óra  
És gondolod, hogy a drivert ez érdekli? Be van bindolva az fbo, ráhívsz egy drawelements-et, ergó írod. Teljesen jogosan dob invalid operation-t; vagy talán shader elemzést kéne csinálnia, hogy "á, biztos csak vicc".

3.2-től buffer és program nem lehet 0, a textúra az elvileg lehet (gyak viszont a gdebugger beszól).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209629   2016.05.20 20:42 GMT+1 óra  
Ja, az valószínűleg csak "ott maradt", és mivel OGL 3.1-től nem lehet 0-t bindolni, az úgy is marad. De azokat a shaderben nem használtam, természetesen. Vagy lehet, hogy ott csak valamit elnéztem, megnézem majd én is még egyszer. Minden esetre olyat nem csinálok, hogy olvasok shaderben egy olyan textúrát, amit írok is. Az egyértelműen undefined behaviour a legjobb esetben is.

szerk.:
Átnéztem, most csak az említett depth attachmentes helyen fordul elő a dolog, de akkor sem írom az adott textúrát, csak olvasom a shaderben, és használom a hardware-teszteket.

Kicsit összevagdostam a dolgot, hogy 1 képen legyen:

Ezt a hozzászólást Instalok módosította (2016.05.20 21:13 GMT+1 óra, ---)

   
Asylum - Törzstag | 5484 hsz       Online status #209627   2016.05.20 12:22 GMT+1 óra  
Amit küldtem neked gdebugger kép azon egyértleműen írsz egy olvasásra bebindolt textúrába.

https://www.dropbox.com/s/p9vb50wbpd97rvb/gdebu.png?dl=0
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209626   2016.05.20 11:15 GMT+1 óra  
Az a baj, hogy renderelek az FBO-ba

Szóval nagyjából így néz ki a dolog:
Kód:
bind FBO#1 ([...] + depthstencil)
draw geometries -> fill depth + stencil

bind FBO#2 ([...] + depthstencil)
disable depth + stencil write
bind depthstencil texture
draw lights with depth and stencil tests

Szóval a gond az, hogy hardveres tesztekhez is kell, hogy ott legyen, meg a fragment shadernek is kell, mert abból számolom vissza a world-space pozíciót. De tulajdonképpen az adott textúrába nem írok, miközben olvasom. A spec. viszont erről pont nem ír rendesen, hogy ilyenkor mi van. De az eddig kipróbált kártyákon működött a dolog (még egy Intel 3000-n is )

   
Asylum - Törzstag | 5484 hsz       Online status #209625   2016.05.20 09:55 GMT+1 óra  
De miért kéne másolatot csinálni...abba az fbo-ba nem renderelhetsz amiből olvasni akarsz, szóval evidens, hogy be kell bindolnod egy másikat. Vagy pedig detacholod arra az időre.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209624   2016.05.19 14:54 GMT+1 óra  
Idézet
Asylum :
Lehet attacholva meg bindolva is, persze. DE akkor az az fbo ne legyen aktív!


Az a baj, hogy nincs erről egyértelmű leírás, hogy mi van akkor, ha mégis aktív.

Idézet
syam :
Jól látod, csak akkor van gond, ha írsz az attachmentbe. Ez low-level API-kban már szépen látszik.
A cégnél már a legelső deferred pipeline-ban is ezt csináltuk. Bár volt belőle vita, mert a GL spec. nem fogalmazott egyértelműen erről a szituációról (sem)


Igen, pont ezért akadtam itt meg én is. És azért egy blitelést megspórolni egész jó. Oké, még kvázi üres a jelenet, de ebben a formában 100 FPS-t jelent az, hogy nem csinálok a depth-ről egy másolatot.

   
syam - Törzstag | 1491 hsz       Online status #209623   2016.05.19 11:18 GMT+1 óra  
Idézet
Instalok :
Van egy FBO, és egy textúra a depth attachmentre attacholva. Depth write kikapcsolva (glDepthMask). Az FBO bindolva. Majd fogom ugyan azt a textúrát, amit a depth attachmentre attacholtam, bindolom, hogy shaderben tudjam olvasni. Ilyet így szabad? Olvastam a feedback loopról itt, de csak arról ír, hogy, ha módosítom az adatot, akkor van gáz. Eddig ezt elkerültem egy bliteléssel másik textúrába, de az le is zabbant ~50 FPS-t. Logikailag nem látom akadályát, hogy egyszerre legyen bindolva meg attacholva is a textúra, amíg csak olvasok belőle, csak nem tudom, hogy a hardware-ek mennyire szeretik.



Jól látod, csak akkor van gond, ha írsz az attachmentbe. Ez low-level API-kban már szépen látszik.
A cégnél már a legelső deferred pipeline-ban is ezt csináltuk. Bár volt belőle vita, mert a GL spec. nem fogalmazott egyértelműen erről a szituációról (sem)
alias aalberik
   
Asylum - Törzstag | 5484 hsz       Online status #209621   2016.05.19 10:47 GMT+1 óra  
Lehet attacholva meg bindolva is, persze. DE akkor az az fbo ne legyen aktív!
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209619   2016.05.18 16:30 GMT+1 óra  
Van egy FBO, és egy textúra a depth attachmentre attacholva. Depth write kikapcsolva (glDepthMask). Az FBO bindolva. Majd fogom ugyan azt a textúrát, amit a depth attachmentre attacholtam, bindolom, hogy shaderben tudjam olvasni. Ilyet így szabad? Olvastam a feedback loopról itt, de csak arról ír, hogy, ha módosítom az adatot, akkor van gáz. Eddig ezt elkerültem egy bliteléssel másik textúrába, de az le is zabbant ~50 FPS-t. Logikailag nem látom akadályát, hogy egyszerre legyen bindolva meg attacholva is a textúra, amíg csak olvasok belőle, csak nem tudom, hogy a hardware-ek mennyire szeretik.

   
Asylum - Törzstag | 5484 hsz       Online status #209611   2016.05.18 09:36 GMT+1 óra  
ARB_debug_output-ot még megpróbálhatod....
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 607 hsz       Online status #209608   2016.05.17 18:25 GMT+1 óra  
Azt hiszem lemondok a lentebbi hibának az elhárításáról. Igazából csak ott nem működik, és a lebuildelt Unity-s (OGL targetre beállítva) projekt is elreccsen induláskor, szóval betudom driver bugnak. Remélem tényleg az. Már kismilliószor átnéztem a kódot, és nem csinálok semmi rendkívülit.

   
Instalok - Tag | 607 hsz       Online status #209599   2016.05.17 10:19 GMT+1 óra  
Hm, ha van egy FBO-m 3 color attachmenttel (legyen most tex0, tex1, tex2), akkor mielőtt az FBO-ba rajzolok, meg kell győződnöm róla, hogy ezek nincsenek bindolva? Azt olvastam, hogy undefined behaviour ez az eset.

Mivel úgy néz ki a rajzolás, hogy:
Kód:
bind FBO_1
render geometries

bind FBO_2
bind FBO_1_textures
render lighting

ezért a következő frame-ben az FBO_1 textúrái bindolva lesznek.

szerk.:
A lentebbire visszatérve, a specifikáció szerint nem lenne muszáj depth és stencil buffert használni a backbuffernél. Nálam mégis hibát dob, ha nincs depth és stencil bit depth beállítva a context létrehozásakor.
OpenGL 2.0 specification
Further, an implementation or context may not provide depth, stencil, or accumulation buffers.

Ezt a hozzászólást Instalok módosította (2016.05.17 13:01 GMT+1 óra, ---)

   
Geri - Törzstag | 2196 hsz       Online status #209596   2016.05.14 14:23 GMT+1 óra  
hát ha nem hozol létre stencil buffert, akkor elég nehezen írod. ha létrehozol, meg lefoglalódik neki a memória, meg fut vele kapcsolatban jónéhány algó feleslegesen, ami hát nem épp sebességnövelő tényező, bár manapság nem hiszem, hogy sokat lassítana, hisz arra vannak optimizálva a driverek, hogy úgyse használja semmi már 15 éve

   
Instalok - Tag | 607 hsz       Online status #209593   2016.05.13 21:03 GMT+1 óra  
Hát, azért nem irreleváns, mert meg tudom mondani, hogy írjam-e azt a stencilt, vagy sem. Csak ezt kétféleképpen is el lehet érni, lehet, hogy beállítom azt is, hogy GL_KEEP meg glStencilMask(0), és akkor tuti a hatás.

   
Frissebbek | Korábbi postok
[1] > 2 < [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [82]