Skip to content

[BUG] GLES crashes on ancient intel hardware #56

Description

@drfrag666

GZDoom version

All versions

Which game are you running with GZDoom?

Doom 2

What Operating System are you using?

Windows

Please describe your specific OS version

All Windows versions

Relevant hardware info

Intel GMA 4500M and similar GL 2.1 hardware and even some GL 3.1 hardware (HD 3000?)

Have you checked that no other similar issue already exists?

  • I have searched and not found similar issues.

A clear and concise description of what the bug is.

The engine crashes at startup with GLES selected. I know the backtrace it's not very helpful and i wanted to compile a later revision ('Fixing GLES mode to work on real GLES hardware and OpenGL 2 again') installing Windows 10 and VS 2019 but that old laptop now turns itself off. Now it has Windows 7 and VS 2017 installed and i can't compile a later commit. This is from 'GLES: Fix texture MapBuffer and AllocateBuffer create client side memory.' but all versions crash. @emileb

 	0000000000000000()	Desconocido
>	gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::InitializeState() Línea 150	C++
 	gzdoom.exe!IVideo::SetResolution() Línea 325	C++
 	gzdoom.exe!V_Init2() Línea 392	C++
 	gzdoom.exe!D_DoomMain_Internal() Línea 3497	C++
 	gzdoom.exe!GameMain() Línea 3603	C++
 	gzdoom.exe!DoMain(HINSTANCE__ * hInstance) Línea 981	C++
 	gzdoom.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * nothing, wchar_t * cmdline, int nCmdShow) Línea 1270	C++

linea 150:	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

-		this	0x000000000ba26270 {HWGammaActive=false mDebug=empty camtexcount=0 }	OpenGLESRenderer::OpenGLFrameBuffer *
-		SystemGLFrameBuffer	{SwapInterval=1 }	SystemGLFrameBuffer
-		SystemBaseFrameBuffer	{m_Gamma=-431602080. m_Brightness=-431602080. m_Contrast=-431602080. ...}	SystemBaseFrameBuffer
-		DFrameBuffer	{Width=1008 Height=602 hwcaps=32 ...}	DFrameBuffer
-		__vfptr	0x00000001403d7100 {gzdoom.exe!void(* OpenGLESRenderer::OpenGLFrameBuffer::`vftable'[46])()} {0x000000013f389a0f {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::`vector deleting destructor'(unsigned int)}, ...}	void * *
		[0]	0x000000013f389a0f {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::`vector deleting destructor'(unsigned int)}	void *
		[1]	0x000000013f369840 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::InitializeState(void)}	void *
		[2]	0x000000013f372b16 {gzdoom.exe!DFrameBuffer::IsVulkan(void)}	void *
		[3]	0x000000013f3835ec {gzdoom.exe!DFrameBuffer::IsPoly(void)}	void *
		[4]	0x000000013f373a20 {gzdoom.exe!DFrameBuffer::GetCanvas(void)}	void *
		[5]	0x000000013f38cdcc {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::Update(void)}	void *
		[6]	0x000000013f374f3d {gzdoom.exe!DFrameBuffer::UpdatePalette(void)}	void *
		[7]	0x000000013f37e6b9 {gzdoom.exe!SystemBaseFrameBuffer::IsFullscreen(void)}	void *
		[8]	0x000000013f38cd0e {gzdoom.exe!SystemBaseFrameBuffer::ToggleFullscreen(bool)}	void *
		[9]	0x000000013f37d967 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::SetVSync(bool)}	void *
		[10]	0x000000013f38243a {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::SetTextureFilterMode(void)}	void *
		[11]	0x000000013f3803e2 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::CreateHardwareTexture(int)}	void *
		[12]	0x000000013f37cdd2 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::PrecacheMaterial(class FMaterial *,int)}	void *
		[13]	0x000000013f37a22b {gzdoom.exe!DFrameBuffer::CreateMaterial(class FGameTexture *,int)}	void *
		[14]	0x000000013f375073 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::BeginFrame(void)}	void *
		[15]	0x000000013f37ded0 {gzdoom.exe!SystemBaseFrameBuffer::SetWindowSize(int,int)}	void *
		[16]	0x000000013f38b20b {gzdoom.exe!DFrameBuffer::StartPrecaching(void)}	void *
		[17]	0x000000013f38ad7e {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::RenderState(void)}	void *
		[18]	0x000000013f366aa5 {gzdoom.exe!SystemBaseFrameBuffer::GetClientWidth(void)}	void *
		[19]	0x000000013f375b1d {gzdoom.exe!SystemBaseFrameBuffer::GetClientHeight(void)}	void *
		[20]	0x000000013f38a53b {gzdoom.exe!DFrameBuffer::BlurScene(float)}	void *
		[21]	0x000000013f386cc9 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::CreateVertexBuffer(void)}	void *
		[22]	0x000000013f383c54 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::CreateIndexBuffer(void)}	void *
		[23]	0x000000013f381503 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::CreateDataBuffer(int,bool,bool)}	void *
		[24]	0x000000013f3668c0 {gzdoom.exe!DFrameBuffer::RenderTextureIsFlipped(void)const }	void *
		[25]	0x000000013f37e35d {gzdoom.exe!DFrameBuffer::Backend(void)}	void *
		[26]	0x000000013f36c5e5 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::DeviceName(void)const }	void *
		[27]	0x000000013f372afd {gzdoom.exe!DFrameBuffer::AmbientOccludeScene(float)}	void *
		[28]	0x000000013f36ead9 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::FirstEye(void)}	void *
		[29]	0x000000013f377e0e {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::NextEye(int)}	void *
		[30]	0x000000013f366a19 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::SetSceneRenderTarget(bool)}	void *
		[31]	0x000000013f3639bd {gzdoom.exe!DFrameBuffer::UpdateShadowMap(void)}	void *
		[32]	0x000000013f371a09 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::WaitForCommands(bool)}	void *
		[33]	0x000000013f376d47 {gzdoom.exe!DFrameBuffer::SetSaveBuffers(bool)}	void *
		[34]	0x000000013f361d66 {gzdoom.exe!DFrameBuffer::ImageTransitionScene(bool)}	void *
		[35]	0x000000013f364836 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::CopyScreenToBuffer(int,int,unsigned char *)}	void *
		[36]	0x000000013f3834d9 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::FlipSavePic(void)const }	void *
		[37]	0x000000013f361d8e {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::RenderTextureView(class FCanvasTexture *,class std::function<void >)}	void *
		[38]	0x000000013f36b500 {gzdoom.exe!DFrameBuffer::SetActiveRenderTarget(void)}	void *
		[39]	0x000000013f371c7f {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::WipeStartScreen(void)}	void *
		[40]	0x000000013f364bf1 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::WipeEndScreen(void)}	void *
		[41]	0x000000013f386e72 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::PostProcessScene(bool,int,float,class std::function<void > const &)}	void *
		[42]	0x000000013f36b60e {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::Draw2D(void)}	void *
		[43]	0x000000013f3818f0 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::SetViewportRects(struct IntRect *)}	void *
		[44]	0x000000013f36be74 {gzdoom.exe!OpenGLESRenderer::OpenGLFrameBuffer::GetScreenshotBuffer(int &,enum ESSType &,float &)}	void *
		Width	1008	int
		Height	602	int
		hwcaps	32	int
		glslversion	0.000000000	float
+		instack	0x000000000ba26288 {0, 0}	int[2]
		stencilValue	0	int
		uniformblockalignment	256	unsigned int
		maxuniformblock	65536	unsigned int
+		vendorstring	0x0000000180b7d920 "Intel"	const char *
+		mSkyData	0x0000000000000000 <NULL>	FSkyVertexBuffer *
+		mVertexData	0x0000000000000000 <NULL>	FFlatVertexBuffer *
+		mViewpoints	0x0000000000000000 <NULL>	HWViewpointBuffer *
+		mLights	0x0000000000000000 <NULL>	FLightBuffer *
-		mShadowMap	{mLights=Size = 0 mAABBTree=0x0000000000000000 <NULL> mNewTree=false ...}	IShadowMap
-		__vfptr	0x00000001405100e8 {gzdoom.exe!void(* IShadowMap::`vftable'[2])()} {0x000000013f387755 {gzdoom.exe!IShadowMap::`vector deleting destructor'(unsigned int)}}	void * *
		[0]	0x000000013f387755 {gzdoom.exe!IShadowMap::`vector deleting destructor'(unsigned int)}	void *
-		mLights	Size = 0	TArray<float,float>
		Size	0	unsigned int
		Capacity	0	unsigned int
+		[Vista sin formato]	{Array=0x0000000000000000 {???} Count=0 Most=0 }	TArray<float,float>
+		mAABBTree	0x0000000000000000 <NULL>	hwrenderer::LevelAABBTree *
		mNewTree	false	bool
+		mLightList	0x0000000000000000 <NULL>	IDataBuffer *
+		mNodesBuffer	0x0000000000000000 <NULL>	IDataBuffer *
+		mLinesBuffer	0x0000000000000000 <NULL>	IDataBuffer *
+		CollectLights	empty	std::function<void __cdecl(void)>
-		mScreenViewport	{left=-842150451 top=-842150451 width=-842150451 ...}	IntRect
		left	-842150451	int
		top	-842150451	int
		width	-842150451	int
		height	-842150451	int
-		mSceneViewport	{left=-842150451 top=-842150451 width=-842150451 ...}	IntRect
		left	-842150451	int
		top	-842150451	int
		width	-842150451	int
		height	-842150451	int
-		mOutputLetterbox	{left=-842150451 top=-842150451 width=-842150451 ...}	IntRect
		left	-842150451	int
		top	-842150451	int
		width	-842150451	int
		height	-842150451	int
-		mSceneClearColor	0x000000000ba26378 {0.000000000, 0.000000000, 0.000000000, 255.000000}	float[4]
		[0]	0.000000000	float
		[1]	0.000000000	float
		[2]	0.000000000	float
		[3]	255.000000	float
		mPipelineNbr	2	int
		mPipelineType	1	int
		FrameTime	0	unsigned __int64
		fpsLimitTime	0	unsigned __int64
		isIn2D	false	bool
		m_Gamma	-431602080.	float
		m_Brightness	-431602080.	float
		m_Contrast	-431602080.	float
+		m_origGamma	0x000000000ba263b4 {52685, 52685, 52685, 52685, 52685, 52685, 52685, 52685, 52685, 52685, 52685, 52685, ...}	unsigned short[768]
		m_Fullscreen	false	bool
-		m_displayDeviceNameBuffer	0x000000000ba269b5 "\\\\.\\DISPLAY1"	char[32]
		[0]	92 '\\'	char
		[1]	92 '\\'	char
		[2]	46 '.'	char
		[3]	92 '\\'	char
		[4]	68 'D'	char
		[5]	73 'I'	char
		[6]	83 'S'	char
		[7]	80 'P'	char
		[8]	76 'L'	char
		[9]	65 'A'	char
		[10]	89 'Y'	char
		[11]	49 '1'	char
		[12]	0 '\0'	char
		[13]	-51 'Í'	char
		[14]	-51 'Í'	char
		[15]	-51 'Í'	char
		[16]	-51 'Í'	char
		[17]	-51 'Í'	char
		[18]	-51 'Í'	char
		[19]	-51 'Í'	char
		[20]	-51 'Í'	char
		[21]	-51 'Í'	char
		[22]	-51 'Í'	char
		[23]	-51 'Í'	char
		[24]	-51 'Í'	char
		[25]	-51 'Í'	char
		[26]	-51 'Í'	char
		[27]	-51 'Í'	char
		[28]	-51 'Í'	char
		[29]	-51 'Í'	char
		[30]	-51 'Í'	char
		[31]	-51 'Í'	char
-		m_displayDeviceName	0x000000000ba269b5 "\\\\.\\DISPLAY1"	char *
			92 '\\'	char
		m_Monitor	0x0000000000010001	void *
		SwapInterval	1	int
		HWGammaActive	false	bool
-		mDebug	empty	std::shared_ptr<OpenGLESRenderer::FGLDebug>
-		[Vista sin formato]	{...}	std::shared_ptr<OpenGLESRenderer::FGLDebug>
+		std::_Ptr_base<OpenGLESRenderer::FGLDebug>	{_Ptr=0x0000000000000000 <NULL> _Rep=0x0000000000000000 <NULL> }	std::_Ptr_base<OpenGLESRenderer::FGLDebug>
		camtexcount	0	int

Steps to reproduce the behaviour.

Just select GLES and run any iwad.

Your configuration

Provide a Log

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions