[Aportes indexados] GLBridgeVB6 - D3D9/D3D11/D3D12/GL/VULKAN en VB6

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
UPDATE: No se daran mas noticias en este thread/foro, ya que hay un foro dedicado exclusivamente para tal libreria: Link

LibGL
es una libreria que provee acceso a varias librerias programadas en "C" para ser utilizadas en VB6. Nace de la necesidad de poder incluir tecnologias modernas en este lenguaje precario y antiguo. DESCARGA

Cuenta con las siguientes implementaciones.

------------------------------------------------------------

BGFX es una libreria programada en C++ utilizada por muchos motores modernos para abstraer las diferentes librerias graficas tales como DirectX, OpenGL y Vulkan. Esta libreria ofrece una abstraccion muy poderosa y a su vez facil de utilizar.

Las caracteristicas que mas destaco de tal libreria son
  • Soporte a muchas librerias graficas tales como (D3D9/D3D11/D3D12, OpenGL, Vulkan)
  • Soporte a muchos conceptos de dibujos tales como (Buffers, Shaders, Framebuffers, Occlusion Query, Geometry Shader, Instancing, Deferred Rendering)
  • La abstraccion no tiene ningun tipo de penalizacion (Zero Overhead)
  • La llamadas son transformadas en comandos y ejecutados en otro hilo (Multithreaden)

La documentacion se encuentra disponible en LINK y algunos ejemplos usando la libreria en LINK.

------------------------------------------------------------

STB es una libreria general programada en C utilizada para cargar varios formatos de objetos en memoria. Expone funciones para cargar cualquier tipo de imagen como JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC y PNM

La documentacion se encuentra disponible en LINK

------------------------------------------------------------

Codigo ejemplo base: Crear un nuevo proyecto, agregar LibGL.dll como referencia y los demas DLLs en donde se encuentra el proyecto. Compilar (Para que tome el directorio base y agregar un nuevo Form, donde dentro del form el siguiente codigo)

Código:
Option Explicit

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const MAIN_VIEW As Byte = 0 ' BGFX trabaja con "Capas", donde cada capa se asimila a una capa de photoshop. Los comandos se ejecutan en diferentes capas

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private m_IsRunning As Boolean    ' Flag que indica si se encuentra corriendo
Private m_IsDebug   As Boolean    ' Flag que indica si se encuentra en modo debug

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Form_Load()
    Me.Show

    ' Creamos el dispositivo
    m_IsRunning = Video.Create(Me.hWnd, RENDERER_DIRECT3D11)

    ' Reseteamos y seteamos informacion acerca de la ventana
    Call Video.Reset(1024, 768)

    ' Especificamos como vamos a limpiar MAIN_VIEW
    Call Video.SetViewClear(MAIN_VIEW, CLEAR_COLOR, &HFF)

    Do While (m_IsRunning)    ' Loop principal de nuestro juego
 
        ' Seteamos el viewport de MAIN_VIEW
        Call Video.SetViewRect(MAIN_VIEW, 0, 0, 1024, 768)
 
        ' Esto solo es requerido si no se esta dibujando nada en la pantalla
        Call Video.Touch(0)
 
        ' Notificamos que terminamos de dibujar
        Call Video.Frame
 
        DoEvents
    Loop


    Video.Destroy

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Form_Unload(Cancel As Integer)
    m_IsRunning = False   ' Requiere esto, ya que BGFX corre en otro hilo y podria provocar efectos indeseados

    Cancel = False
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error Resume Next

    Select Case KeyCode
        Case vbKeyEscape
            Unload Me
        Case vbKeyF1     ' Activamos o desactivamos la informacion debug
            If m_IsDebug Then
                m_IsDebug = False
 
                Call Video.SetDebug(DEBUG_MODE_NONE)
            Else
                m_IsDebug = True
 
                Call Video.SetDebug(DEBUG_MODE_STATS)
            End If
    End Select
End Sub
 
Última edición:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Si querian un cambio en el Argentum, este es el indicado!

:+1:
 

Lherius

Dragón Ancestral Lvl 6
Especialista de Diseño
Felicitaciones Wolf por éste aporte. Es realmente una innovación sin límites, que permite mejorar el Argentum a niveles nunca antes pensados. :+1:
 

JuR.-

Aprendiz en programación C#
Wolftein disculpa, pero que es esto?

edit: que es, que hace? mejora los graficos?
edit 2: ahora que estoy viendo, esta mortal :p
 

^[GS]^

GS-Zone Admin
Administrador
Excelente! Eso quiere decir que gracias a BGFXBridgeVB6 podría hacerse un AO con soporte de cualquiera de estas tecnologías, sin necesidad de modificar nada del código? Es eso lo que estoy entendiendo? :p
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Excelente! Eso quiere decir que gracias a BGFXBridgeVB6 podría hacerse un AO con soporte de cualquiera de estas tecnologías, sin necesidad de modificar nada del código? Es eso lo que estoy entendiendo? :p
Exacto, el codigo de cada tecnologia (D3D, OpenGL) esta abstraido de tal manera que nunca lo tocas, programas sobre la abstraccion. La funcion para iniciar el motor es donde podes elegir que utilizar (D3D9, D3D11, etc) y el wrapper es identico en su mayoria; asi que cualquiera puede copiar los ejemplos y correrlo en VB6.
[DOUBLEPOST=1487300826,1487291582][/DOUBLEPOST]Libreria 100% funcional, agregado descarga y ejemplo basico!.
[DOUBLEPOST=1487311913][/DOUBLEPOST]

Agregado STB (https://github.com/nothings/stb) que expone funciones para cargar una gran variedad de imagenes a velocidades sorprendentes. Soporta JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC y PNM.

 

Dalton.-

Rest in peace my sweet Argentum Online
Qué lindo ver esto, cosas que pueden llegar a cambiar el futuro del Argentum y para bien. Te felicito y admiro !
 

^[GS]^

GS-Zone Admin
Administrador
Que tan fácil es la implementación de esto en un AO que utiliza DX7?, que es el standard :p
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Que tan fácil es la implementación de esto en un AO que utiliza DX7?, que es el standard :p
Si lo comparamos con reescribir el juego en otro lenguaje, esto es mucho mas facil ya que solo se debe cambiar algunas implementaciones. Pero toma tiemp porque el codigo de Argentum Online de por si esta muy mesclado, hay llamadas y declaraciones a DirectX por todas partes inclusive AO utiliza DirectX para sonido. @GoDKeR esta actualmente haciendo tal trabajo de cambiar todo eso utilizando una clase que implemente para poder dibujar 2D de manera eficiente utilizando BGFX.
[DOUBLEPOST=1487541409,1487362287][/DOUBLEPOST]Actualizado!, ahora el wrapper es general y contiene todas las librerias trabajando en conjunto y en una misma DLL ActiveX.
 

Dr. GoDKeR

El Rey y el As
Miembro del equipo
Administrador
Developer
Moderador de RRPP
Moderador de AO
Moderador de Tecnología
Moderador de Entretenimiento
Moderador de Diseño
Especialista de RRPP
Especialista de Entretenimiento
Especialista de Tecnología
Especialista de Argentum
Especialista de Diseño
Una muestra de FenixXIII corriendo con LibGL (no es una foto nueva, ya que dentro de poco van a haber features nuevas muy copadas)

Corriendo en DirectX 11
 

Gasparix

Aprendiz Lvl 1
Che y los fps como van?
Yo la prueba que hice no fue muy buena con los fps y en la imagen de GoDKeR veo que dice 187, no me parece muy buena...
Al agregarle varias animaciones o textos baja mucho o queda igual?
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Che y los fps como van?
Yo la prueba que hice no fue muy buena con los fps y en la imagen de GoDKeR veo que dice 187, no me parece muy buena...
Al agregarle varias animaciones o textos baja mucho o queda igual?
Depende de como lo uses. Nosotros para Fenix creamos una clase batch bastante optimizada para crear 'batchs' de sprites y asi dibujarlos de un pase. En la foto que mostro GoDKeR utilizando una Intel HD 3000 (Notebook) + en modo IDE se le duplicaron los fps que tenia utilizando el codigo sin libGL; los fps son relativos depende de muchos factores y si vamos al caso a mi me tira 9.000 fps con una gtx 1070.
 
Última edición:

Gasparix

Aprendiz Lvl 1
Depende de como lo uses. Nosotros para Fenix creamos una clase batch bastante optimizada para crear 'batchs' de sprites y asi dibujarlos de un pase. En la foto que mostro GoDKeR utilizando una Intel HD 3000 se le duplicaron los fps que tenia utilizando el codigo sin libGL; los fps son relativos depende de muchos factores y si vamos al caso a mi me tira 9.000 fps con una gtx 1070.
Perfecto, mi duda de esto es si mejora el rendimiento, ya que quiero usar muchas animaciones en mi cliente y me limita un poco el que se baje tanto los fps :p

Quedo a la espera de más noticias y de la liberación del fénix para tener una idea de cómo implementarlo en mi proyecto. :)
Muchas gracias por el aporte,
Suerte.
 

Facry

El peluca sabee!!!!
Increible, esto es lo que siempre quise y no encontré... y hoy que se me da por buscar de nuevo... japish, in da face
Ya se vienen AOs con el engine de Vulkan xD

PD: Ahí probé a mi AO sacando el renderscreen y todo lo que tiene que ver con directx 7, pero deje el conteo de fps y tira 500 máximo, con el renderscreen tira hasta 300

Eso quiere decir que hay algo muy "hardcode" ya en el cliente en sí ? Voy a tener que limpiar algo no? porque contando un loop en un proyecto con 1 solo form, me tira 250000 operaciones algo asi
 
Última edición:

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Increible, esto es lo que siempre quise y no encontré... y hoy que se me da por buscar de nuevo... japish, in da face
Ya se vienen AOs con el engine de Vulkan xD

PD: Ahí probé a mi AO sacando el renderscreen y todo lo que tiene que ver con directx 7, pero deje el conteo de fps y tira 500 máximo, con el renderscreen tira hasta 300

Eso quiere decir que hay algo muy "hardcode" ya en el cliente en sí ? Voy a tener que limpiar algo no? porque contando un loop en un proyecto con 1 solo form, me tira 250000 operaciones algo asi
Abajo de esas simples llamadas hay mucho codigo no es una simple llamada (en el ejemplo). Otra cosa que esta mal es tratar de contar los fps utilizando VB, BGFX ya hace eso internamente ya que BGFX se ejecuta en otra thread aparte lo cual hace imposible poder calcular los fps como se viene haciendo. En mi caso me anda mejor D3D11
 
Arriba