[Aportes] Módulo Dx8 (Pasa muy fácilmente desde Dx7)

Facry

Aprendiz Lvl 2
Bueno, no veo un aporte así desde hace mucho, y el que estaba aportando godker con nose quien mas, no creo que alguien muy nuevo en esto de programar pueda hacerlo funcionar, así que me puse a hacer este modulo de clase para directx8... desde el cliente realmente no hay que tocar nada que tenga que ver con directx

Todo extraído y testeado por mi, es una mezcla del motor de VBGore y el del AO (Menduz creo que era jaja ni idea)

Que sepan que por ahora para hacerlo mucho más simple hice el dibujado mediante sprites, que es un poco mas lento que por vectores, que es como está en el AO, pero mas adelante lo voy a cambiar para poder implementar efectos como luces, blur, etc... también otros chiches como incorporarle el sistema de sonido, contar fps, mouse, interface... que esas son boludeces pero lo dejo para la proxima pero también lo pueden poner ustedes.. :D

screen.png


El código del cls (en la parte superior están todas las funciones públicas):
Código:
'   Motor gráfico DX8       ~~By Facry~~
'   Dibujado por sprites
'   mas lento que por vectores
'   Aún así puede superar los 1000 fps (500 fps con una laptop con Intel HD Graphics)
'   Para eliminar los server de ao fruta con el directx7 del año del pe2
'
'
'
'
'
'
'
'   Declaraciones:          Private Engine As New clsGraphic
'
'   Iniciar:                Set Engine = New clsGraphic:
'                           Call Engine.EstablecerVariables(CantidadDeGraficos, Ruta*, ColorKeyOn):
'                           Call Engine.Iniciar(hWnd)
'
'   Crear fuentes:          Call Engine.Fuente_Crear(Name, Size, Bold, Italic)
'
'   Dibujar Sprite:         Call Engine.Dibujar_Sprite(PosX, PosY, Width, Height, SourceX, SourceY, **Color, TextureNum, Degrees)
'
'   Dibujar texto:          Call Engine.Dibujar_Texto(PosX, PosY, Str(Texto), **Color, Width, Height, [Center], [Font])
'
'   Dibujar Buffer:         Call Engine.Dibujar_Buffer(Clear)
'
'
'   Detener engine:         Call Engine.Detener:
'                           Set Engine = Nothing
'
'
'
'   *           La ruta se pone así "ruta\#.png"
'   **          El color puede ser -1 o para personalizar el color D3DColorARGB(Alpha, R, G, B)
'
'
'




Option Explicit

Private CargaConKeyColor As Boolean

Private GraphicDir As String

Private Declare Function tGT Lib "winmm.dll" Alias "timeGetTime" () As Long

Private Const SurfaceTimerMax As Long = 300000

Private NumFiles As Integer

Private vertList(3) As TLVERTEX

Private Type D3D8Textures
    texture As Direct3DTexture8
    texwidth As Long
    texheight As Long
End Type

Private Type TLVERTEX
    X As Single
    Y As Single
    Z As Single
    rhw As Single
    color As Long
    Specular As Long
    tu As Single
    tv As Single
End Type

Private Type TLVERTEX2
    X As Single
    Y As Single
    Z As Single
    rhw As Single
    color As Long
    Specular As Long
    tu1 As Single
    tv1 As Single
    tu2 As Single
    tv2 As Single
End Type

Private Const PI As Single = 3.14159275180032

'Describes the return from a texture init
Private Type D3DXIMAGE_INFO_A
    width As Long
    height As Long
    Depth As Long
    MipLevels As Long
    format As CONST_D3DFORMAT
    ResourceType As CONST_D3DRESOURCETYPE
    ImageFileFormat As Long
End Type

Private DisplayFormhWnd As Long


Private CantidadDeGraficos As Integer

'Private DirectX As New DirectX7
'Private DirectDraw As DirectDraw7

'Private PrimarySurface As DirectDrawSurface7
'Private PrimaryClipper As DirectDrawClipper
'Private BackBufferSurface As DirectDrawSurface7
'Private SecundaryClipper As DirectDrawClipper
'Private SurfaceDB() As DirectDrawSurface7

'Private MainDestRect As RECT
'Private MainViewRect As RECT
'Private BackBufferRect As RECT


'Font List
Private font_primitive_list() As StdFont  'This contains all basic data on fonts
Private font_list() As D3DXFont
Private font_count As Long
Private font_last As Long


'Describes a transformable lit vertex
Private Const FVF As Long = D3DFVF_XYZRHW Or D3DFVF_TEX1 Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR

Private SurfaceDB() As Direct3DTexture8          'The list of all the textures
Private SurfaceTimer() As Long                   'How long until the surface unloads
Private LastTexture As Long                      'The last texture used
Private D3DWindow As D3DPRESENT_PARAMETERS       'Describes the viewport and used to restore when in fullscreen
Private UsedCreateFlags As CONST_D3DCREATEFLAGS  'The flags we used to create the device when it first succeeded
Private DispMode As D3DDISPLAYMODE               'Describes the display mode


'Publico por el modulo modSound

Public DX As DirectX8
Private D3D As Direct3D8
Private D3DX As D3DX8
Private D3DDevice As Direct3DDevice8

Private SpriteBegun As Byte
Private Sprite As D3DXSprite
Private SpriteScaleVector As D3DVECTOR2


Private Const DegreeToRadian As Single = 0.0174532919296  'Pi / 180

Private DeviceStencil As Direct3DSurface8
Private DeviceBuffer As Direct3DSurface8

Private NotFirstRender As Boolean

Private pUdtMemStatus As MEMORYSTATUS

Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type

Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)



Public Function Fuente_Crear(ByVal style As String, ByVal size As Long, ByVal bold As Boolean, _
    ByVal italic As Boolean) As Long
    '**************************************************************
    'Author: Aaron Perkins
    'Last Modify Date: 2/27/2003
    'Returns the font_index if successful, else 0
    'Modified by Juan Martín Sotuyo Dodero
    '**************************************************************
    On Error GoTo ErrorHandler:
    Fuente_Crear = Font_Next_Open
 
    Font_Make Fuente_Crear, style, bold, italic, size
 
    Exit Function
ErrorHandler:
    Fuente_Crear = 0
End Function

Private Sub Font_Make(ByVal font_index As Long, ByVal style As String, ByVal bold As Boolean, _
    ByVal italic As Boolean, ByVal size As Long)
    '*****************************************************************
    'Author: Aaron Perkins
    'Last Modify Date: 3/28/2004
    'Modified by Juan Martín Sotuyo Dodero
    '*****************************************************************
    'Update array size
    If font_index > font_last Then
        font_last = font_index
        ReDim Preserve font_list(1 To font_last)
    End If
    font_count = font_count + 1
 
    Dim font_desc As IFont 'We use this temporarily to setup the font
    Dim fnt As New StdFont 'This is also used to describe and setup the font
    fnt.Name = style
    fnt.size = size
    fnt.bold = bold
    fnt.italic = italic
 
    If font_last = 1 And font_count = 1 Then
        ReDim Preserve font_primitive_list(1 To font_last)
        Set font_primitive_list(font_last) = fnt
    ElseIf font_last > UBound(font_primitive_list()) Then
        ReDim Preserve font_primitive_list(1 To font_last)
        Set font_primitive_list(font_last) = fnt
    End If
 
 
    Set font_desc = fnt
    Set font_list(font_index) = D3DX.CreateFont(D3DDevice, font_desc.hFont)
 
End Sub

Private Function Font_Next_Open() As Long
    '*****************************************************************
    'Author: Aaron Perkins
    'Last Modify Date: 10/07/2002
    '
    '*****************************************************************
    Font_Next_Open = font_last + 1
End Function



Public Sub Dibujar_Buffer(Optional ByVal ClearRender As Boolean = False)
 
    Dim j As Integer
 
 
    'Check if we have the device
    If D3DDevice.TestCooperativeLevel <> D3D_OK Then
     
        'The worst we can do at this point is avoid an error we can't fix!
        On Error Resume Next
     
        'Do a loop while device is lost
        If D3DDevice.TestCooperativeLevel = D3DERR_DEVICELOST Then Exit Sub
     
        'Clear all the textures
        LastTexture = -999
        For j = 1 To NumFiles
            Set SurfaceDB(j) = Nothing
        Next j
     
        'Clear the D3DXSprite
        SpriteBegun = 0
        Set Sprite = Nothing
        Set Sprite = D3DX.CreateSprite(D3DDevice)
     
        Set DeviceBuffer = Nothing
        Set DeviceStencil = Nothing
     
        'Make sure the scene is ended
        D3DDevice.EndScene
     
        'Reset the device
        D3DDevice.Reset D3DWindow
     
        Set DeviceBuffer = D3DDevice.GetRenderTarget
        Set DeviceStencil = D3DDevice.GetDepthStencilSurface
     
        'Reset the render states
        Engine_Init_RenderStates
     
        'Algun día...
     
        'Load the particle textures
        '        Engine_Init_ParticleEngine True
     
        On Error GoTo 0
     
    Else
     
        'We have to bypass the present the first time through here or else we get an error
        If NotFirstRender Then
         
            'Close off the last sprite
            If SpriteBegun Then
                Sprite.End
                SpriteBegun = 0
                LastTexture = -101
            End If
         
            With D3DDevice
             
                'End the rendering (scene)
                .EndScene
             
                'Flip the backbuffer to the screen
                .Present ByVal 0, ByVal 0, 0, ByVal 0
             
            End With
         
        Else
         
            'Set NotFirstRender to True so we can start displaying
            NotFirstRender = True
         
        End If
     
    End If
 
    D3DDevice.BeginScene
 
    If ClearRender = True Then
        D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
    End If
 
End Sub

Private Function Engine_Init_D3DDevice(D3DCREATEFLAGS As CONST_D3DCREATEFLAGS) As Boolean
    '************************************************************
    'Initialize the Direct3D Device - start off trying with the
    'best settings and move to the worst until one works
    'More info: http://www.vbgore.com/GameClient.TileEngine.Engine_Init_D3DDevice
    '************************************************************
 
    'When there is an error, destroy the D3D device and get ready to make a new one
    On Error GoTo ErrOut
 
    'Retrieve current display mode
    D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode
 
    'Set format for windowed mode
    D3DWindow.Windowed = 1  'State that using windowed mode
    D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY
    D3DWindow.BackBufferFormat = DispMode.format    'Use format just retrieved
 
 
    'Set the D3DDevices
    If Not D3DDevice Is Nothing Then Set D3DDevice = Nothing
    Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, DisplayFormhWnd, D3DCREATEFLAGS, D3DWindow)
 
    'Store the create flags
    UsedCreateFlags = D3DCREATEFLAGS
 
 
 
    'Everything was successful
    Engine_Init_D3DDevice = True
 
    'Force the main form to refresh - vital for widescreen! Remove and find out why if you dare... >:D
    DoEvents
 
    Exit Function
 
ErrOut:
 
    'Destroy the D3DDevice so it can be remade
    Set D3DDevice = Nothing
 
    'Return a failure
    Engine_Init_D3DDevice = False
 
End Function

Private Sub Engine_Init_RenderStates()
    '************************************************************
    'Set the render states of the Direct3D Device
    'This is in a seperate sub since if using Fullscreen and device is lost
    'this is eventually called to restore settings.
    'More info: http://www.vbgore.com/GameClient.TileEngine.Engine_Init_RenderStates
    '************************************************************
 
    With D3DDevice
     
        'Set the shader to be used
        .SetVertexShader FVF
     
        'Set the render states
        .SetRenderState D3DRS_LIGHTING, 0
        .SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
        .SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
        .SetRenderState D3DRS_ALPHABLENDENABLE, 1
        .SetRenderState D3DRS_FILLMODE, D3DFILL_SOLID
        .SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
        .SetRenderState D3DRS_ZENABLE, False
        .SetRenderState D3DRS_ZWRITEENABLE, False
     
        D3DDevice.SetRenderState D3DRS_EDGEANTIALIAS, 1
        .SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE
     
        'Particle engine settings
        'No hay vectores asi que no importa, lo pongo igual porque me la aguanto
        .SetRenderState D3DRS_POINTSPRITE_ENABLE, 1
        .SetRenderState D3DRS_POINTSCALE_ENABLE, 0
     
        'Set the texture stage stats (filters)
        .SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_POINT
        .SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_POINT
     
    End With
 
End Sub

Public Function Iniciar(ByRef setDisplayFormhWnd As Long)
 
    '*****************************************************************
    'InitEngine
    '*****************************************************************
 
    DisplayFormhWnd = setDisplayFormhWnd
 
 
    Set DX = New DirectX8
    Set D3D = DX.Direct3DCreate()
    Set D3DX = New D3DX8
 
    If Not Engine_Init_D3DDevice(D3DCREATE_PUREDEVICE) Then
        If Not Engine_Init_D3DDevice(D3DCREATE_HARDWARE_VERTEXPROCESSING) Then
            If Not Engine_Init_D3DDevice(D3DCREATE_MIXED_VERTEXPROCESSING) Then
                If Not Engine_Init_D3DDevice(D3DCREATE_SOFTWARE_VERTEXPROCESSING) Then
                    MsgBox "Could not init D3DDevice. Exiting..."
                    End
                    End
                End If
            End If
        End If
    End If
    Engine_Init_RenderStates
 
 
 
 
    Set Sprite = D3DX.CreateSprite(D3DDevice)
 
    'Set the scaling to default aspect ratio
    SpriteScaleVector.X = 1
    SpriteScaleVector.Y = 1
 
 
 
End Function

Public Sub EstablecerVariables(ByVal setCantidadDeGraficos As Integer, ByVal RutaGraficos As String, ByVal BlackKeyColor As Boolean)
 
    CargaConKeyColor = BlackKeyColor
    GraphicDir = RutaGraficos
    NumFiles = setCantidadDeGraficos
 
    CantidadDeGraficos = setCantidadDeGraficos
 
    ReDim SurfaceDB(1 To setCantidadDeGraficos)
    ReDim SurfaceTimer(1 To setCantidadDeGraficos)
 
End Sub


Public Function Detener()
 
    '*****************************************************************
    'Shutsdown engine
    '*****************************************************************
    Dim LoopC As Integer
 
    If Not D3DDevice Is Nothing Then Set D3DDevice = Nothing
    If Not D3DX Is Nothing Then Set D3DX = Nothing
 
 
 
    If Not DX Is Nothing Then Set DX = Nothing
 
    '****** Clear DirectX objects ******
    '    Set PrimarySurface = Nothing
    '    Set PrimaryClipper = Nothing
    '    Set BackBufferSurface = Nothing
 
    'Clear GRH memory
    '    For LoopC = 1 To CantidadDeGraficos
    '        Set SurfaceDB(LoopC) = Nothing
    '    Next LoopC
    '    Set DirectDraw = Nothing
 
 
    '    Set DirectX = Nothing
 
End Function









Private Sub Device_Text_Render(ByVal font As D3DXFont, ByVal text As String, ByVal top As Long, ByVal left As Long, _
    ByVal width As Long, ByVal height As Long, ByVal color As Long, ByVal format As Long)
    '**************************************************************
    'Author: Aaron Perkins
    'Last Modify Date: 10/07/2002
    '
    '**************************************************************
    Dim TextRect As RECT 'This defines where it will be
 
    TextRect.top = top
    TextRect.left = left
    TextRect.bottom = top + height
    TextRect.Right = left + width
    D3DX.DrawText font, color, text, TextRect, format
 
End Sub

Private Sub Engine_ReadyTexture(ByVal texturenum As Long)
    '************************************************************
    'Gets a texture ready to for usage
    'More info: http://www.vbgore.com/GameClient.TileEngine.Engine_ReadyTexture
    '************************************************************
 
    'Load the surface into memory if it is not in memory and reset the timer
    If texturenum > 0 Then
        If SurfaceTimer(texturenum) < tGT Then Engine_Init_Texture texturenum
        SurfaceTimer(texturenum) = tGT + SurfaceTimerMax
    End If
 
    'Set the texture
    If texturenum <= 0 Then
        D3DDevice.SetTexture 0, Nothing
        LastTexture = 0
    Else
        If LastTexture <> texturenum Then
            D3DDevice.SetTexture 0, SurfaceDB(texturenum)
            LastTexture = texturenum
        End If
    End If
 
End Sub

Private Sub Engine_Init_Texture(ByVal texturenum As Integer)
    '*****************************************************************
    'Loads a texture into memory
    'More info: http://www.vbgore.com/GameClient.TileEngine.Engine_Init_Texture
    '*****************************************************************
    Dim UseTextureFormat As CONST_D3DFORMAT
    Dim FilePath As String
 
    'Check for a valid texture
    If texturenum < 1 Then Exit Sub
 
    'Make sure we even need to load the texture
    If SurfaceTimer(texturenum) > tGT Then Exit Sub
 
    'Set the texture timer
    SurfaceTimer(texturenum) = tGT + SurfaceTimerMax
 
    'Check if we have the device
    If D3DDevice.TestCooperativeLevel <> D3D_OK Then Exit Sub
 
    'Make sure we try not to load a file while the engine is unloading
    '    If IsUnloading Then Exit Sub
 
    'Get the path
    FilePath = Replace(GraphicDir, "#", texturenum)
 
    'Check if the texture exists
    If Dir(FilePath, vbNormal) = "" Then
        MsgBox "Error! Could not find the following texture file:" & vbNewLine & FilePath, vbOKOnly
        '        IsUnloading = 1
        Exit Sub
    End If
 
    If CargaConKeyColor = False Then
        Set SurfaceDB(texturenum) = D3DX.CreateTextureFromFile(D3DDevice, FilePath)
    Else
        Set SurfaceDB(texturenum) = D3DX.CreateTextureFromFileEx(D3DDevice, FilePath, D3DX_DEFAULT, D3DX_DEFAULT, _
        3, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_FILTER_NONE, D3DX_FILTER_NONE, &HFF000000, ByVal 0, ByVal 0)
    End If
 
End Sub


Public Sub Dibujar_Sprite(ByVal X As Single, ByVal Y As Single, ByVal width As Single, ByVal height As Single, ByVal SrcX As Single, ByVal SrcY As Single, ByVal Light As Long, ByVal texturenum As Long, ByVal Degrees As Single)
    '    '*****************************************************************
    '    'Renders *bytes* in the form of a D3DXSprite instead of a rectangle (slower, less flexibility)
    '    '*****************************************************************
    Dim SrcRect As RECT
    Dim v2 As D3DVECTOR2
    Dim v3 As D3DVECTOR2
 
    'End the old sprite we had going (only if the texture changed)
    If texturenum <> LastTexture Then
        If SpriteBegun = 1 Then
            Sprite.End
            Sprite.Begin
        End If
    End If
 
    'Ready the texture
    Engine_ReadyTexture texturenum
 
    'Create the source rectangle
    With SrcRect
        .left = SrcX
        .top = SrcY
        .Right = .left + width
        .bottom = .top + height
    End With
 
    'Create the rotation point
    If Degrees Then
        Degrees = ((Degrees + 180) * DegreeToRadian)
        If Degrees > 360 Then Degrees = Degrees - 360
        With v2
            .X = (width * 0.5)
            .Y = (height * 0.5)
        End With
    End If
 
    'Set the translation (location on the screen)
    v3.X = X
    v3.Y = Y
 
    If texturenum > 0 Then
        Sprite.Draw SurfaceDB(texturenum), SrcRect, SpriteScaleVector, v2, Degrees, v3, Light
     
    Else
        Sprite.Draw Nothing, SrcRect, SpriteScaleVector, v2, 0, v3, Light
        'Aquí pondría el dibujado primitivo de vectores (muuucho mas rapido)
        'SI TUVIERA UNO!!
        '            D3DDevice.DrawIndexedPrimitiveUP D3DPT_TRIANGLESTRIP
    End If
 
 
 
 
End Sub

Public Sub Dibujar_Texto(lngXPos As Integer, lngYPos As Integer, strText As String, lngColor As Long, width As Long, height As Long, Optional ByVal Centrar As Boolean = False, Optional ByVal Int_Fuente As Integer = 1)
    On Error Resume Next
 
 
 
    If strText <> "" Then
        Call Device_Text_Render(font_list(Int_Fuente), strText, lngYPos, lngXPos, width, height, lngColor, DT_TOP Or DT_CENTER)
    End If
 
End Sub

'////////////////////////////////////
'///// LO DEJO PERO NO TENDRIA QUE IR

Public Function GetColorARGB(ByVal clrLong As Long) As Long
 
    Dim R As Long, G As Long, B As Long
 
    B = clrLong \ 65536
    G = (clrLong - B * 65536) \ 256
    R = clrLong - B * 65536 - G * 256
 
    GetColorARGB = D3DColorARGB(255, R, G, B)
 
End Function

'////////////////////////////////////

Disculpen que lo siguiente no lo tenga tabulado, es que lo pase al block de notas

Código del modulo (puede ser en el form también):
Código:
Public isRunning As Boolean
Private Engine As New clsGraphic

Sub Main()

Form1.Show
isRunning = True

Set Engine = New clsGraphic

'Si cambian la ruta dejen el # que va a ser donde va a ir el numero del gráfico
Call Engine.EstablecerVariables(32000, App.Path & "\#.png", False)
 
Call Engine.Iniciar(Form1.hWnd)
Call Engine.Fuente_Crear("Tahoma", 8, True, False)

Do While isRunning
Call Engine.Dibujar_Sprite(0, 0, 640, 480, 0, 0, D3DColorARGB(B, 70, 70, 70), 12, 0)

Call Engine.Dibujar_Texto(0, 480 / 2, "FPS: " & Str("Arreque no se cuentan los fps"), -1, 640, 30)

Call Engine.Dibujar_Buffer(True)

DoEvents
Loop

Call Engine.Detener
 
Set Engine = Nothing


Ahora si en el formulario ponen:
Código:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 
    isRunning = False
    Cancel = 1
 
End Sub

Casi me olvido, les dejo directamente lo que es el proyecto de mas arriba pero mejor
http://kevin.me.la/gs/Engine_Dx8.zip
 
Última edición:

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
Esta medio desordenado el códgio, producto de haber juntado todo, algunas cosas:

TLVertex y TLVertex2??

DeviceBuffer y DeviceStencil?

"...no creo que alguien muy nuevo en esto de programar pueda hacerlo funcionar"
Ahi esta el problema de este foro, los muy nuevos se meten con cosas que no deberian.
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Sin animo de ofender, hay muchas cosas innecesarias, otras mal hechas y muy mala practica con respecto a la forma en programar (no hay constancia) que podría confundir mas a los que quisieran implementarlo.

Como por ejemplo

Código:
Private Declare Function tGT Lib "winmm.dll" Alias "timeGetTime" () As Long

Declaras variables "DeEsteTipo" y despues declaras variables de "este_tipo", o declaras funciones "DeEsteTipo" o "De_Este_Tipo"

En donde declaras los estados pareciera que fuese un copy paste sin entenderlo, ya que hay varios estados que tienen el mismo valor por default al cual estas seteando y otros que ni siquiera es necesario tocarlos para poder dibujar algo como Argentum Online.

Haber dejado los mismo comentarios y no arreglar el codigo hace ver esta implementacion otro copy paste mas.
 

Facry

Aprendiz Lvl 2
Esta medio desordenado el códgio, producto de haber juntado todo, algunas cosas:

TLVertex y TLVertex2??

DeviceBuffer y DeviceStencil?


Ahi esta el problema de este foro, los muy nuevos se meten con cosas que no deberian.

Claro hoy en día viene cualquiera diciendo "como se crea un label bbaajbjj aiuda"
Yo aporto algo, si no te gusta fue y si te gusta me alegro

Se que hay algunas declaraciones que ni siquiera se usan y están repetidas o son innecesarias, pero lo seleccionas y lo borras y listo lo optimizaste un %99 ahre yo se que no hacen que funcione mas lento asi que por ahora no me importa.

Con este "motor", "rejunte" como lo quieras llamar (jajaja), cualquiera lo puede usar escribiendo exactamente 8 lineas en cualquier proyecto :feliz:

edit: sin los "muy nuevos" este foro tiene 3 mensajes por día
 
Última edición:

Facry

Aprendiz Lvl 2
Sin animo de ofender, hay muchas cosas innecesarias, otras mal hechas y muy mala practica con respecto a la forma en programar (no hay constancia) que podría confundir mas a los que quisieran implementarlo.

Como por ejemplo

Código:
Private Declare Function tGT Lib "winmm.dll" Alias "timeGetTime" () As Long

Declaras variables "DeEsteTipo" y despues declaras variables de "este_tipo", o declaras funciones "DeEsteTipo" o "De_Este_Tipo"

En donde declaras los estados pareciera que fuese un copy paste sin entenderlo, ya que hay varios estados que tienen el mismo valor por default al cual estas seteando y otros que ni siquiera es necesario tocarlos para poder dibujar algo como Argentum Online.

Haber dejado los mismo comentarios y no arreglar el codigo hace ver esta implementacion otro copy paste mas.

Que yo sepa en este código solamente una vez hice eso del timeGetTime

Si, es puro copy-paste
Todo extraído y testeado por mi, es una mezcla del motor de VBGore y el del AO (Menduz creo que era jaja ni idea)

Pero es completamente funcional, todo lo que está escrito funciona porque lo que hago yo es: escribir un poco, y run debug, y asi hasta que funca y después lo optimizo como puedo, ahora que no esté taaaaan optimizado como el bgfx nose si era así, ya es otra cosa

Código:
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Ponelo así y listo solucionado :v
 

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
No dije que no necesitamos a los muy nuevos, dije que hay que enseñarles a como se deberia trabajar.

Y que funcione no quiere decir que sirva.
 

Facry

Aprendiz Lvl 2
No dije que no necesitamos a los muy nuevos, dije que hay que enseñarles a como se deberia trabajar.

Y que funcione no quiere decir que sirva.

Ahi esta el problema de este foro, los muy nuevos se meten con cosas que no deberian.

En que quedamos? Les enseñamos o liberamos un motor gráfico? Jajaj

A mi me sirve, y seguro que a otros también, pero solamente dije que es funcional, que hace lo que tiene que hacer, el titulo del post es exacto...
 

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
No entiendo a donde vas, que tiene que ver liberar un motor gráfico con enseñarles a como usarlo?
 

Facry

Aprendiz Lvl 2
Cualquiera esa pregunta
Yo digo que si los muy nuevos se meten con cosas que no deberían, como van a aprender?
Yo acá estoy dejando un motor gráfico pero también estoy enseñando como se usa
 

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
Yo digo que si los muy nuevos se meten con cosas que no deberían, como van a aprender?

Empezando por lo que se tiene que empezar, uno no aprende a correr antes que caminar.

Yo acá estoy dejando un motor gráfico pero también estoy enseñando como se usa

La intención y la explicación están bien, pero si se los estas dando para copiar y pegar, no les vas a enseñar mucho.
 
Arriba