고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post Reply
JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Thu May 21, 2020 7:04 pm

XU4를 사용해 흑/백으로 이루어진 라인 패턴을 고속으로 디스플레이 하는 앱을 만들고 싶은데 문제가 생겨 여쭤봅니다.
OS는 Linux odroid 4.14.32-126 입니다.

저속으로 라인 패턴을 디스플레이 하면 문제가 없는데(Lowspeed.mp4)
고속으로 라인 패턴을 디스플레이 시 패턴과 그 다음에 올 패턴이 서로 뒤섞이는 문제가 발생합니다.(Highspeed.mp4)

라이브러리 문제인가 싶어서 OpenGL, OpenCV, SDL 등 여러 이미지 투사 라이브러리를 사용해 봤는데 모두 동일한 문제가 발생합니다.
어떻게 하면 괜찮을까요? Minimal 이미지를 쓰면 좀 나아질 수 있을까요?

참고로 똑같은 소스코드를 가지고 PC에서 빌드 시 이런 뒤섞임 문제는 발생하지 않았습니다.
Attachments
PatternShowing.zip
(1.35 MiB) Downloaded 9 times

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Fri May 22, 2020 11:12 am

X11 드라이버의 한계같습니다. Minimal image에서 SDL2로 테스트 해보시길 바랍니다.

그런데 작성하신 프로그램이 OpenGL-ES2 GPU 가속기를 사용하는지요?

JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Tue May 26, 2020 10:59 am

odroid wrote:
Fri May 22, 2020 11:12 am
X11 드라이버의 한계같습니다. Minimal image에서 SDL2로 테스트 해보시길 바랍니다.

그런데 작성하신 프로그램이 OpenGL-ES2 GPU 가속기를 사용하는지요?
소스코드 상에서 GPU 가속기를 사용하라는 커맨드를 줄 수 있나요?
일단 사용하고 있는 GL 버전은 다음과 같습니다.
Attachments
gl_version.png
gl_version.png (82.41 KiB) Viewed 374 times

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Tue May 26, 2020 11:27 am

SDL 프로그램을 개발할때 OpenGL-ES2 API를 사용해야만 하드웨어 가속기가 동작합니다.

먼저 GPU 드라이버 상태를 확인하기 위해서 glmark2-es2를 실행해 보세요.

Code: Select all

sudo apt update
sudo apt install glmark2-es2
glmark2-es2

JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Wed May 27, 2020 9:27 am

odroid wrote:
Tue May 26, 2020 11:27 am
SDL 프로그램을 개발할때 OpenGL-ES2 API를 사용해야만 하드웨어 가속기가 동작합니다.

먼저 GPU 드라이버 상태를 확인하기 위해서 glmark2-es2를 실행해 보세요.

Code: Select all

sudo apt update
sudo apt install glmark2-es2
glmark2-es2
=======================================================
glmark2 2014.03+git20150611.fa71af2d
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.1 v1.r17p0-01rel0.d17cf84c10daf186c21e3efcfae21a65
=======================================================
[build] use-vbo=false: FPS: 263 FrameTime: 3.802 ms
[build] use-vbo=true: FPS: 416 FrameTime: 2.404 ms
[texture] texture-filter=nearest: FPS: 392 FrameTime: 2.551 ms
[texture] texture-filter=linear: FPS: 442 FrameTime: 2.262 ms
[texture] texture-filter=mipmap: FPS: 443 FrameTime: 2.257 ms
[shading] shading=gouraud: FPS: 375 FrameTime: 2.667 ms
[shading] shading=blinn-phong-inf: FPS: 369 FrameTime: 2.710 ms
[shading] shading=phong: FPS: 365 FrameTime: 2.740 ms
[shading] shading=cel: FPS: 352 FrameTime: 2.841 ms
[bump] bump-render=high-poly: FPS: 263 FrameTime: 3.802 ms
[bump] bump-render=normals: FPS: 439 FrameTime: 2.278 ms
[bump] bump-render=height: FPS: 418 FrameTime: 2.392 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 343 FrameTime: 2.915 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 192 FrameTime: 5.208 ms
[pulsar] light=false:quads=5:texture=false: FPS: 424 FrameTime: 2.358 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 141 FrameTime: 7.092 ms
[desktop] effect=shadow:windows=4: FPS: 281 FrameTime: 3.559 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 32 FrameTime: 31.250 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 33 FrameTime: 30.303 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 34 FrameTime: 29.412 ms
[ideas] speed=duration: FPS: 175 FrameTime: 5.714 ms
[jellyfish] <default>: FPS: 288 FrameTime: 3.472 ms
[terrain] <default>: FPS: 43 FrameTime: 23.256 ms
[shadow] <default>: FPS: 258 FrameTime: 3.876 ms
[refract] <default>: FPS: 82 FrameTime: 12.195 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 432 FrameTime: 2.315 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 368 FrameTime: 2.717 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 414 FrameTime: 2.415 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 394 FrameTime: 2.538 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 344 FrameTime: 2.907 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 391 FrameTime: 2.558 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 380 FrameTime: 2.632 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 352 FrameTime: 2.841 ms
=======================================================
glmark2 Score: 301
=======================================================

glmark2-es2 실행 시 로그입니다. 실행 도중 끊김 등은 없었는데 GPU 드라이버 상 특별한 문제는 없는지요?

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Wed May 27, 2020 9:45 am

Mali-T628 GPU 드라이버를 이용한 3D 하드웨어 가속은 정상적으로 동작하고 있습니다.

JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Thu May 28, 2020 7:08 pm

SDL2에서 GLES2 옵션을 사용하도록 코딩하고 렌더러에서도 하드웨어 가속, Vsync를 사용하도록 설정했는데 동일한 증상이 계속 발생합니다..
혹시 Vsync 문제가 아닐까 해서 XU4로 https://www.vsynctester.com/ 같이 Vsync test 사이트에 접속해 보니 Vsync가 제대로 작동이 안 됩니다.(데스크탑에서는 문제없이 됨)
Tearing이라고 이런 현상이 포럼 내에서 좀 보이는데 해결법이 있을까요?

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Fri May 29, 2020 11:39 am

우분투 테스크탑이 설치된 라이젠 PC에서도 해당 사이트에 접속해보니 Vsync가 안된다고 나옵니다.
어떤 방법으로 Vsync를 검사하는 사이트인지 잘 모르겠습니다.
Minimal image에서 DRM/FB 기반의 그래픽 랜더링과 데스크탑 X11의 웹브라우저 위에서 진행하는 그래픽 랜더링은 차이가 많은 것으로 알고 있습니다.

만드신 SDL2 테스트 프로그램 코드를 포스트해봐 주세요. 아는 범위내에서 리뷰를 해보겠습니다.

JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Mon Jun 01, 2020 10:03 am

odroid wrote:
Fri May 29, 2020 11:39 am
우분투 테스크탑이 설치된 라이젠 PC에서도 해당 사이트에 접속해보니 Vsync가 안된다고 나옵니다.
어떤 방법으로 Vsync를 검사하는 사이트인지 잘 모르겠습니다.
Minimal image에서 DRM/FB 기반의 그래픽 랜더링과 데스크탑 X11의 웹브라우저 위에서 진행하는 그래픽 랜더링은 차이가 많은 것으로 알고 있습니다.

만드신 SDL2 테스트 프로그램 코드를 포스트해봐 주세요. 아는 범위내에서 리뷰를 해보겠습니다.
/home/odroid/temp 에 있는 이미지를 불러와서 루프를 돌리면서 디스플레잉 하는 소스입니다.

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

Code: Select all

#include "header.h"                    
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengles.h>
#include <iostream>
#include <sstream>
using namespace std;


int n_ImageCount = 0;
char* c_path = "/home/odroid/temp";


static void PrintGLString(GLenum name)
{
	const GLubyte* ret = glGetString(name);
	if(ret == 0)
		cout << "Failed to get GLstring : " << name << endl;
	else
		printf("%s\n", ret);
}

 static void PrintRendererInfo(SDL_RendererInfo& rendererInfo) 
    { 
       printf( "Renderer: %s software=%d accelerated=%d, presentvsync=%d targettexture=%d\n", 
         rendererInfo.name, 
         (rendererInfo.flags & SDL_RENDERER_SOFTWARE) != 0, 
         (rendererInfo.flags & SDL_RENDERER_ACCELERATED) != 0, 
         (rendererInfo.flags & SDL_RENDERER_PRESENTVSYNC) != 0, 
         (rendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) != 0 ); 
    } 

int main(int argc, char** argv)
{
	cout << endl <<   "Input Image Count : ";
	cin >> n_ImageCount;
	if(n_ImageCount > 8 || n_ImageCount < 1)
		n_ImageCount = 8;

	if(SDL_Init(SDL_INIT_VIDEO) != 0)
	{
		cerr << "SDL_INIT() Failed: " << SDL_GetError() << endl;
		exit(1);
	}
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

	SDL_Renderer* p_sdlRenderer;
	SDL_Surface* p_sdlImage[n_ImageCount];
	SDL_Texture* p_sdlTexture[n_ImageCount]; //ÆÐÅÏ À̹ÌÁö°¡ µéŸî°š

	SDL_Window* p_sdlWindow = SDL_CreateWindow("SDL2 show image", 0,  0, 1280, 720, SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL);
	SDL_GLContext glcontext = SDL_GL_CreateContext(p_sdlWindow);

	int idx = SDL_GetWindowDisplayIndex(p_sdlWindow);
	SDL_Rect bounds;
	SDL_GetDisplayBounds(idx, &bounds);
	SDL_SetWindowBordered(p_sdlWindow, SDL_FALSE);
	SDL_SetWindowPosition(p_sdlWindow, bounds.x, bounds.y);
	SDL_SetWindowSize(p_sdlWindow, bounds.w, bounds.h);

	if (SDL_GL_SetSwapInterval(1) == -1)
	{
		cout << "SetSwapInterval is not supported : " << SDL_GetError() << endl;
	}

	p_sdlRenderer = SDL_CreateRenderer(p_sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	if (p_sdlRenderer == NULL)
	{
		cout << "Creating Renderer ERROR : " << SDL_GetError() << endl;
		exit(1);
	}


	for (int i = 0; i < n_ImageCount; i++)
	{
		ostringstream str_Filename;
		str_Filename << c_path << "/image_" << i << ".bmp";
		p_sdlImage[i] = SDL_LoadBMP(str_Filename.str().c_str());
		p_sdlTexture[i] = SDL_CreateTextureFromSurface(p_sdlRenderer, p_sdlImage[i]);
	}

	int n_Current_Status = 1; //1 : œºÆ®ž®¹Ö(ÃÖÃÊ »óÅÂ) 2: ÄžÃÄ
	int n_Input_Status = 0;
	int n_Output_Status = 0;
	
	const unsigned char* versiongl = glGetString(GL_VERSION);
	cout << "current gl : " << versiongl << endl;

	cout << "GL_RENDERER : ";
	PrintGLString(GL_RENDERER);
	cout << "GL_SHADING_LANGUAGE_VERSION : ";	
	PrintGLString(GL_SHADING_LANGUAGE_VERSION);
	cout << "GL_EXTENSIONS : ";	
	PrintGLString(GL_EXTENSIONS);

	SDL_Log("Current video driver : %s\n", SDL_GetCurrentVideoDriver());

	int drv_index;
	for(int i = 0; i < SDL_GetNumRenderDrivers(); i++)
	{
	/*	SDL_RendererInfo info;
		SDL_GetRenderDriverInfo(it, &info);

		SDL_Log("%s\n", info.name);
		if(strcmp("opengles2", info.name) == 0)
		drv_index = it;*/
    	SDL_RendererInfo rendererInfo; 
    	SDL_GetRenderDriverInfo(i, &rendererInfo); 
    	printf( "%d ", i ); 
    	PrintRendererInfo(rendererInfo); 
	}
	/*SDL_Surface* screen = SDL_SetVideoMode(800, 600, 16, SDL_OPENGL);
	if(screen->flags & SDL_OPENGL)
		cout << "usign opengl" << endl;
	else
		cout << "not using opengl" << endl;
*/
	SDL_RendererInfo renderinfo;
	if(SDL_GetRendererInfo(p_sdlRenderer, &renderinfo) != 0)
	{
		cout << "Get p_sdlRender info failed" << endl;
	}

	PrintRendererInfo(renderinfo);

	while (1)
	{
		switch (n_Current_Status)
		{
			case 1: //œºÆ®ž®¹Ö »óÅÂ
			{
				n_Input_Status = 2;
				if (n_Input_Status == 2)
				{
					SDL_RenderClear(p_sdlRenderer);
					SDL_RenderCopy(p_sdlRenderer, p_sdlTexture[0], NULL, NULL); // 1~14°³ÀÇ ÆÐÅÏ Áß 1¹ø° ÆÐÅÏÀ» ¹Ìž® º¹»çÇØ ³õÀœ
					SDL_RenderPresent(p_sdlRenderer);
					n_Current_Status = n_Input_Status;
					break;
				}
			
			}
			case 2: //ÄžÃÄ »óÅÂ
			{

				SDL_SetHint(SDL_HINT_RENDER_VSYNC, "1");
				for (unsigned int imageCnt = 0; imageCnt < n_ImageCount; imageCnt++)
				{
					SDL_SetRenderDrawColor(p_sdlRenderer, 255, 0, 0, 255);
					SDL_RenderClear(p_sdlRenderer);
					delay(1);
					SDL_RenderCopy(p_sdlRenderer, p_sdlTexture[imageCnt], NULL, NULL);
					SDL_RenderPresent(p_sdlRenderer);
				}
			}
		}
	}


	return 0;

}
Attachments
rgbimage.zip
(7.18 KiB) Downloaded 2 times

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Mon Jun 01, 2020 11:12 am

Mate Desktop 이미지의 x11위에서 실행하셨나요? 아니면 Minimal 이미지에서 DRM위에서 실행하셨나요?

JJJ
Posts: 17
Joined: Thu Apr 18, 2019 12:07 pm
languages_spoken: Korean, English
ODROIDs: XU3, XU4, N2
Has thanked: 1 time
Been thanked: 0
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by JJJ » Mon Jun 01, 2020 1:16 pm

odroid wrote:
Mon Jun 01, 2020 11:12 am
Mate Desktop 이미지의 x11위에서 실행하셨나요? 아니면 Minimal 이미지에서 DRM위에서 실행하셨나요?
Mate Desktop 및 x11 에서 실행했습니다.

User avatar
odroid
Site Admin
Posts: 34162
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 683 times
Been thanked: 619 times
Contact:

Re: 고속으로 라인 패턴을 디스플레이 하고 싶습니다.

Post by odroid » Mon Jun 01, 2020 1:26 pm

위에서 말씀드린대로 x11위에서 렌더링은 VSYNC 문제가 발생합니다.
Minimal 이미지에서 실행해 보시길 바랍니다.

Post Reply

Return to “XU4/HC1+/HC2/XU3”

Who is online

Users browsing this forum: No registered users and 1 guest