Esto es sólo una pregunta rápida antes de sumergirse más profundamente en la conversión de mi actual sistema de renderizado de openGL. He oído que las texturas necesarias para estar en la base 2 tamaños con el fin de ser almacenado para la representación. ¿Es esto cierto?

Mi aplicación es muy apretado en la memoria, pero la mayoría de los mapas de bits no son potencias de dos. ¿El almacenamiento de base no 2 texturas consumen más memoria?

el poder de los dos != square. 32×64 es potencia de dos, no de la plaza, 13×13 es cuadrado, no es potencia de dos.
Buen punto. Aunque, de cualquier manera es necesario no ser potencia de dos.

OriginalEl autor Kleptine | 2010-09-18

4 Comentarios

  1. 10

    Es cierto que dependiendo de la OpenGL ES versión de OpenGL ES 1.0/1.1 tiene el poder de dos restricción. OpenGL ES 2.0 no tiene la limitación, pero restringir la envoltura de los modos para no poder de dos texturas.

    La creación de grandes texturas para que coincida con la OLLA dimensiones hace de los desechos de la memoria de textura.

    Así que no hay absolutamente ninguna manera de representar un no poder de dos de tamaño de mapa de bits con openGL, sin perder la memoria? Eso es molesto. Oh que bien, me alegro de que no comiencen a revisar mi código todavía.
    Con OpenGL ES 1.0/1.1, no.
    Por el camino, usted debe saber que OpenGL ES y OpenGL no tiene las mismas limitaciones, OpenGL 2.0 y más allá apoya NPOT texturas directamente.
    Muy bien, gracias.
    No mipmaps y sólo GL_CLAMP_TO_EDGE se admite como una envoltura de modo. Vea las notas en khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml

    OriginalEl autor Matias Valdenegro

  2. 6

    Suresh, la potencia de 2 limitación fue construido en OpenGL de vuelta en el (muy) primeros días de los gráficos por ordenador (antes asequible aceleración de hardware), y fue hecho por razones de rendimiento. Bajo nivel de representación de código obtiene un rendimiento decente impulso cuando puede ser codificado por el poder-de-dos texturas. Incluso en la era moderna de la GPU, BOTE texturas son más rápidos que NPOT texturas, pero la diferencia de velocidad es mucho menor de lo que solía ser (aunque todavía puede ser notable en muchos dispositivos de ES).

    GuyNoir, lo que debe hacer es construir una textura atlas. Me acaba de resolver este problema yo este fin de semana pasado por mi propio juego para Android. He creado una clase llamada TextureAtlas, y su constructor llamadas glTexImage2D() para crear una gran textura de cualquier tamaño que elija (pasar el valor null para los valores de los píxeles). Luego puedo llamar a agregar(id, mapa de bits), que llama a glTexSubImage2D () repetidamente para embalar en la imágenes más pequeñas. El TextureAtlas clase de pistas el espacio usado y libre dentro de la textura y los rectángulos de cada mapa de bits se almacena en. A continuación, el código de representación puede llamar a get(id) para obtener el rectángulo de una imagen dentro del atlas (que se puede convertir a las coordenadas de la textura).

    Lado de la nota #1: Elegir la mejor manera de empacar en diversos tamaño de las texturas NO es una tarea trivial. Decidí empezar con la simple lógica en la TextureAtlas clase (creo máquina de escribir + retorno de carro + salto de línea) y asegurarse de que la carga de las imágenes en el mejor fin de tomar ventaja de esa lógica. En mi caso, que era empezar con el cuadrado más pequeño-ish imágenes y trabajar a mi manera hasta el medio de la plaza-ish imágenes. Entonces me carga ninguna corto+ancho de las imágenes, la fuerza de un CR+LF, y luego cargar cualquier altura+flaco imágenes. Me carga la plaza más grande-ish imágenes en last.

    Lado de la nota #2: Si usted necesita múltiples textura atlas, intente grupo de imágenes en el interior de cada uno que serán prestados en conjunto para minimizar el número de veces que usted necesita para cambiar las texturas (que puede matar el rendimiento). Por ejemplo, en mi juego para Android pongo todo el juego estático de la junta de elementos en un atlas y todos los cuadros de diversos efectos de animación en una segunda atlas. De que manera puedo enlazar atlas #1 y dibujar todo en el tablero de juego, entonces puedo enlazar atlas #2 y dibujar todos los efectos especiales en la parte superior de la misma. Dos de textura selecciona en cada fotograma es muy eficiente.

    Lado de la nota #3: Si usted necesita repetir/reflejo de texturas, que necesitan ir dentro de su propia texturas, y necesita la escala (no agregar negro píxeles de relleno en los bordes).

    Sí, he considerado algo similar. La única cosa es que todavía hay algunas pequeñas cantidades de pérdida de memoria, y en un programa en el que estoy empujando constantemente los 24mb límites, necesito toda la memoria que puedo conseguir.

    OriginalEl autor Sean O’Neil

  3. 3

    No, debe ser un 2base. Sin embargo, usted puede evitar esto mediante la adición de barras de color negro en la parte superior y/o inferior de la imagen, a continuación, utilizando las coordenadas de la textura de la matriz de restricciones donde la textura será asignada a partir de tu imagen. Por ejemplo, digamos que usted tiene un 13 x 16 píxeles textura. Usted puede agregar 3 píxeles de negro a la derecha, a continuación, haga lo siguiente:

    static const GLfloat texCoords[] = {
            0.0, 0.0,
            0.0, 13.0/16.0,
            1.0, 0.0,
            1.0, 13.0/16.0
        };

    Ahora, usted tiene un 2base archivo de imagen, pero no 2base textura. Sólo asegúrese de usar la escala lineal 🙂

    El problema aquí es que los desechos de la memoria de textura; algo en lo que estoy muy presionado para con mi aplicación.

    OriginalEl autor Beaker

  4. 1

    Este es un poco tarde pero No de energía, de 2 de texturas son admite bajo OpenGL ES de 1/2 a través de extensiones.

    La principal es GL_OES_texture_npot. También hay GL_IMG_texture_npot y GL_APPLE_texture_2D_limited_npot para dispositivos iOS

    De verificación para estas extensiones llamando glGetString(GL_EXTENSIONS) y la búsqueda de la extensión que usted necesita.

    También me aconsejan mantener sus texturas a tamaños que son múltiplos de 4, como parte del hardware se extiende texturas si no.

    OriginalEl autor Danny Parker

Dejar respuesta

Please enter your comment!
Please enter your name here