Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [SFML2.4 - VB NET 4.52] Random artifac when move sprite with position.  (Read 6316 times)

0 Members and 1 Guest are viewing this topic.

hechelion

  • Newbie
  • *
  • Posts: 24
    • View Profile
Hi, this is my first post here, but I have a time reading the forum.

I have a very rare and funny problem, I tried to find other similar bug but no luck.

Description:
Randomly a sprite area change when I move the sprite.

I create only one time a sprite from a Texture with a "intrect", the texture and the sprite are power of 2  (texture 512*256 and sprite 64*64).
In the main loop, I'm only move the sprite with the position method, in some frame the drawing looks perfect, but in others, a part of the texture that is not originally in the sprite appears on the screen.

What I did notice is that the bug does not appear if the speed is a rational number, example VelX = VelY = 0.5, etc.

code:
Code: [Select]
Imports SFML.Window
Imports SFML.System
Imports SFML.Graphics

Public Class FrmFrameWork
    Dim WithEvents SFMLwindow As RenderWindow

    Private Sub FrmFrameWork_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim auxStyles As Styles = Styles.Default

        Dim MainLoop As Boolean = True
        Dim auxTimer As Integer = 0

        SFMLwindow = New RenderWindow(New VideoMode(1366, 768), "Prueba error SFML ", auxStyles) 'styles.fullscreen
        SFMLwindow.SetVisible(True)
        SFMLwindow.SetVerticalSyncEnabled(False)
        SFMLwindow.SetFramerateLimit(60)

        Dim texTest As New Texture("proyectiles2.png")
        Dim rctTest As IntRect
        rctTest.Width = 64
        rctTest.Height = 64
        rctTest.Left = 0
        rctTest.Top = 64
        Dim sprTest As New Sprite(texTest, rctTest)

        Dim PosX, PosY As Single
        Dim VelX, VelY As Single

        VelX = 4 * Math.Sin(15 * Math.PI / 180)
        VelY = 4 * Math.Cos(15 * Math.PI / 180)

        While MainLoop
            SFMLwindow.DispatchEvents()

            If Keyboard.IsKeyPressed(Keyboard.Key.Escape) Then MainLoop = False 'ESC siempre cierra el juego

            SFMLwindow.Clear(Color.Black) 'Limpiamos la pantalla

            auxTimer += 1
            If auxTimer Mod 30 = 0 Then
                PosX += VelX
                PosY += VelY
                sprTest.Position = New Vector2f(PosX, PosY)
            End If

            'auxSprite = New Sprite(oMeta.oRtScreen.Texture)
            'auxSprite.Position = oMeta.posScreen
            SFMLwindow.Draw(sprTest)

            SFMLwindow.Display()
        End While

        SFMLwindow.Close()
        Me.Close()


    End Sub
End Class


Detail:
I have the same problems with 2 PC.
PC 1
SFML.NET 2.2(32bit) + NET 4.52
VB NET community 2017
OS: Windows 10
CPU: Intel i7 3610qm
GPU: Nvidia GTX 660m

PC2
SFML.NET 2.4(64bit) + NET 4.52
VB NET Community 2019
OS: Windows 10
CPU: Intel i7 4790
GPU: 4095MB NVIDIA GeForce GTX 980 (MSI)

I always have my drivers and OS updated


PD: Sorry for my English is not my native language.

eXpl0it3r

  • SFML Team
  • Hero Member
  • *****
  • Posts: 11030
    • View Profile
    • development blog
    • Email
Re: [SFML2.4 - VB NET 4.52] Random artifac when move sprite with position.
« Reply #1 on: October 04, 2019, 10:58:34 am »
It's a relatively well known problem of texture bleeding, where the next pixels on the texture are displayed despite the texture rect and positioning not allowing for that.
The solutions usually are to make sure to only position sprites on integer positions or render everything to a render texture and render that to the screen.
Official FAQ: https://www.sfml-dev.org/faq.php
Official Discord Server: https://discord.gg/nr4X7Fh
——————————————————————
Dev Blog: https://duerrenberger.dev/blog/

hechelion

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: [SFML2.4 - VB NET 4.52] Random artifac when move sprite with position.
« Reply #2 on: October 04, 2019, 07:20:42 pm »
Thank for the explanation eXpl0it3r.

One last question. This bug is a general SFML bug or only for the sfml.NET implementation?

eXpl0it3r

  • SFML Team
  • Hero Member
  • *****
  • Posts: 11030
    • View Profile
    • development blog
    • Email
Re: [SFML2.4 - VB NET 4.52] Random artifac when move sprite with position.
« Reply #3 on: October 04, 2019, 07:29:19 pm »
It's not really a bug, it's more a side-effect of how OpenGL works and affects the C++ library the same way.
Official FAQ: https://www.sfml-dev.org/faq.php
Official Discord Server: https://discord.gg/nr4X7Fh
——————————————————————
Dev Blog: https://duerrenberger.dev/blog/

hechelion

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: [SFML2.4 - VB NET 4.52] Random artifac when move sprite with position.
« Reply #4 on: October 04, 2019, 08:58:21 pm »
Thank for the answer eXpl0it3r.