WebHU - Programozási kérdések és válaszok

android pixelek beolvasása a GL_TEXTURE_EXTERNAL_OES-ről

Képpontokat/adatokat próbálok olvasni egy OpenGL textúrából, amely GL_TEXTURE_EXTERNAL_OES-hez van kötve.

A textúra ehhez a célhoz való kötésének oka, hogy ahhoz, hogy élő kamera feedet kaphasson androidon, SurfaceTexture-t kell létrehozni egy OpenGL textúrából, amely GL_TEXTURE_EXTERNAL_OES-hez van kötve.

Mivel az android OpenGL ES-t használ, nem tudom a glGetTexImage()-t használni a képadatok olvasásához.

Ezért a célt egy FBO-hoz kötöm, majd a readPixels() segítségével kiolvasom. Ez az én kódom:

    GLuint framebuffer;
    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

    //Attach 2D texture to this FBO
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);
    status("glFramebufferTexture2D() returned error %d", glGetError());

Valamiért azonban az 1282-es (GL_INVALID_OPERATION) hibát kapom.

23.04.2014

Válaszok:


1

A GL_TEXTURE_EXTERNAL_OES textúracél általában YUV színtérben van, és a glReadPixels() megköveteli, hogy a cél RGB legyen. Valószínűleg nem végzi el automatikusan a színtér-konverziót. Az átalakítást azonban megteheti a saját töredékárnyalatosítójában, amely az RGB-t egy másik textúrává teszi, majd a glReadPixels() segítségével olvassa be.

textúra YUV420-ból RGB konvertáláshoz OpenGL ES-ben

24.04.2014
  • Ez nem pontos. Androidon a YUV-›RGB konverzió automatikusan megtörténik a színfalak mögött. Lásd: stackoverflow.com/questions/46244179/ 06.03.2018

  • 2

    Szerintem ez lehet a probléma:

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
    GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);
    

    Ne csatolja a kameratextúrát a framebufferhez, ehelyett új textúrát kell létrehoznia GL_TEXTURE_2D formátumban

    glGenTextures(1, mTextureHandle, 0);
    
    glBindTexture(GL_TEXTURE_2D, mTextureHandle[0]);
    
    ...
    

    A cameraTexture az, amelyet a SurfaceTexture-től kap, és ez a forrás a rendereléshez. Ez az új textúra az, amelyre renderelni kell (ami később felhasználható a renderelési folyamatban). Ezután tegye ezt:

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
    GL_TEXTURE_2D, mTextureHandle[0], 0);
    

    A cameraTexture a framebuffer csatolt textúrájára rajzolódik, egy egyszerű shader programmal rajzolja meg, köti össze a cameraTexture-t, amikor a shader program használatban van:

    glBindTexture(GL_TEXTURE_EXTERNAL_OES, cameraTexture); 
    
    20.06.2014
  • Milyen megoldást hoz ez a válasz? 05.07.2015
  • Szerintem a helyes megoldás a 2 válasz kombinálása, először hozz létre egy új framebuffert és egy új textúrát és glFramebufferTexture2D-t, majd a shader segítségével a YUV adatokat a frame bufferbe rajzolhatod, majd a glReadPixeleken keresztül kiolvasható. Kicsit bonyolult! 27.03.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..