PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Ошибка SpriteOutput(), возвращает 0


Ошибка SpriteOutput(), возвращает 0

Сообщений 1 страница 11 из 11

1

При использовании примера из описания CreateSprite() вылетает ошибка в строке

Код:
StartDrawing(SpriteOutput(0))

Проверяю IsSprite(#Sprite), возвращает не ноль, но SpriteOutput возвращает 0. На Linux эти же примеры работают, как и примеры на форуме, а в Windows эти же примеры не работают. И у всех практически на форуме работает.
Win10 x64
PB 6.01 x64/x32

Если проверяю на 5.72, то работают но там нет функций теней, для которых примеры выкладывают на форуме.
У меня у одного такая проблема?

0

2

AZJIO написал(а):

Windows эти же примеры не работают

Пример работает.

0

3

Пётр
А переменные среды, там не должно быть пути связанного с PureBasic? Что-то подобное я слышал. Я поискал у себя, ничего нет. А то может компилятор 3D-движок не видит. Не хотелось бы переустанавливать.
Добавил пути к компилятору в %PATH%, ничего не изменилось, та же ошибка.

Отредактировано AZJIO (07.04.2023 18:01:31)

0

4

AZJIO написал(а):

У меня у одного такая проблема?

Было такое из за глюка с видюхой. Попробуй проверить драйверы видеокарты. Спрайты также не работают на стандартном VGA (когда видюха работает без дров)

Отредактировано Webarion (08.04.2023 07:33:10)

0

5

Вот, что у меня решило эту проблему:
Настройки > Компилятор > По умолчанию > Библиотека подсистемы: OpenGL
Сохранить, закрыть IDE, снова открыть IDE и испытать код со спрайтами. Если сработало, значит проблема в DirectX. В PureBasic, со спрайтами, он работает по умолчанию. Если не сработало, надо проверить есть ли OpenGL в системе (у меня установлен вместе с виндой) ну и вообще проверить, либо переустановить DirectX либо OpenGL, в зависимости от используемого.

Отредактировано Webarion (08.04.2023 07:35:31)

0

6

Пётр написал(а):

Пример работает.

Не у всех и не всегда.

0

7

Webarion
разве библиотека подсистемы не подразумевает qt5, gtk2? То есть на чём будут основываться окна, например в Linux, там это можно менять в отличии от стандартного gtk3. Кстати, не обязательно в настройки IDE лезть, это можно поменять индивидуально для исходника указав в настройках компилятора, не перезапуская. Но на всякий случай проверил, просто выдаёт что такая под система не найдена (OpenGL). И я же упоминал, что на 5.72 работает, а чем отличаются мои дрова и настройка для обоих IDE? Они оба используют одни и те же конфиги, которые я указываю через ком.строку, так удобней, в одном поменял и это работает для всех версий, всех разрядностей.

Отредактировано AZJIO (08.04.2023 05:16:39)

0

8

Я протупил вчера. Использовал для теста код где нет SpriteOutput
SpriteOutput без драйверов у меня не работает, и на 5.72 тоже.

Отредактировано Webarion (08.04.2023 07:49:06)

0

9

Тема была поднята https://www.purebasic.fr/english/viewtopic.php?t=80851

0

10

Извините за перевод, давайте посмотрим, могу ли я что-то внести.
для работы с purebasic в Windows вам не нужны никакие переменные окружения,
что, если вам нужно принять во внимание, что для его работы должен быть установлен DirectX, и я думаю, что библиотеки redist,
я думаю ничего другого
важные вещи для использования спрайтов,
вызвать функцию Initsprite()
создать окно окна,
спрайт можно загрузить с помощью load sprite или создать,
если используется загрузочный спрайт или загрузочное изображение,
usepngimagedecoder() (перед загрузкой)
usepngimageencoder() перед записью в png
иногда вам нужно сначала открыть подпрограмму png или jpg или bmp

С изображениями дело обстоит иначе, так как для них не нужно создавать окно, их можно загружать или создавать, применять фильтры и т. д., а также сохранять их без необходимости создания окон

Код:
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
	MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
	End
EndIf
; 


 desktop_quantity = ExamineDesktops()
;Define.i w, h, 

;Debug "You have"+Str(desktop_quantity)+" desktops"
 i=0
  w = DesktopWidth(i)
  h = DesktopHeight(i)
  ;Debug "Screen:"+Str(i)+", Width="+Str(w)+" Height="+Str(h)

  If desktop_quantity>1
 i=1
  w1 = DesktopWidth(i)
  h1 = DesktopHeight(i)
  ;Debug "Screen:"+Str(i)+", Width="+Str(w)+" Height="+Str(h)
EndIf

If OpenWindow(0, 0, 0, w, h, "sprites", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |  #PB_Window_SizeGadget | #PB_Window_Maximize )
  If OpenWindowedScreen(WindowID(0), 0, 0, w, h, 0, 0, 0)
    
     UsePNGImageDecoder() 
   ;example load
     LoadSprite (1,"atlantis_temple_reconstruccion_71EO2NI0.png")
     
    ;example  create
     xlen=SpriteWidth(1); take width of sprite 1
     ylen=SpriteHeight(1); 
     
     Dim mask(xlen,ylen)
          

     
     StartDrawing(SpriteOutput(1))
       For x= 0 To xlen-1
       For y= 0 To ylen-1
         color=Point(x,y)
         colorr=Red(color)
         colorf=RGB(colorr,colorr,colorr);conver to gray
         mask(x,y)=colorf
       Next
     Next
     StopDrawing()
     
          CreateSprite(2, xlen,ylen)
     
          StartDrawing(SpriteOutput(2))
       For x= 0 To xlen-1
       For y= 0 To ylen-1
         color=mask(x,y)
         Plot(x,y,color)
       Next
     Next
     StopDrawing()
     
     UsePNGImageEncoder()
     SaveSprite (2,"gray.png",UsePNGImageEncoder)
     
     
     
     Repeat
    SetFrameRate(72)
    FlipBuffers()
    ClearScreen(0)
    
    
    DisplayTransparentSprite(1,1,1)

  DisplayTransparentSprite(2,100,200)
; Next


; Delay(400)


ExamineKeyboard()
 
        If KeyboardPushed(#PB_Key_D)
        Xcam=Xcam-20
    	EndIf

    	If KeyboardPushed(#PB_Key_A)
      Xcam=Xcam+20
    	EndIf

    	If KeyboardPushed(#PB_Key_W)
        ycam=ycam+20
    	EndIf

    	If KeyboardPushed(#PB_Key_S)
        ycam=ycam-20
    	EndIf
	


 Delay(50)
;     
    event = 0;
    	Repeat
        event = WindowEvent()
    
        	Until Not event;
    Until KeyboardPushed(#PB_Key_Escape)
	MessageRequester("close", "good luuck", 0)
EndIf
Else
	MessageRequester("Error", "Can't open windowed screen!", 0)
	End
EndIf
Debug "eend"
End

0

11

zephirus написал(а):

установлен DirectX

1. Если я могу запускать 3D игры значит у меня DirectX установлен.
2. Если на 5.72 работает, значит дело не в системе?
Теоретически я могу попробовать переустановить всё выше указанное, но не хочется сломать ОС, скорее всего установка redist потребует удаление всех версий и потом установка не менее часа это всё будет происходить. И DirectX как бы идёт комплектом, разве что некоторые игры требуют старой версии и приходилось копировать библиотеки в систему методом недостающих без перезаписи, чтобы не повредить системные файлы. Но так как моей ОС примерно 5 лет, то наверно всё это я уже делал 5 лет назад.

Смотрю "Установка и удаление программ", там redist версии 2005, 2008, 2010, 2012, 2013, 2015-2022

Отредактировано AZJIO (11.06.2023 17:57:02)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Ошибка SpriteOutput(), возвращает 0