Opengl Shader Program Disable

300x250

 

쉐이더 프로그램을 종료하기 위해서는  NULL 또는 0으로 값을 넣어서 종료시켜줘야 합니다.

glUseProgram(NULL); 또는 glUseProgram(0);

 

 

아래 여러 예를 들어볼께요.

예제1 ) 단순 프로그램 종료 예시 입니다.

만약 glUseProgramObjectARB을 사용했다면 똑같이 glUseProgramObjectARB로 사용하면 됩니다.

programID = LoadShaders("VertexShader.txt", "FragmentShader.txt");
glUseProgram(programID);
...
...
...
glUseProgram(NULL);

 

예제2) 여러 버퍼를 바인딩한 경우의 예시

프로그램 사용과 VAO 바인딩, 각종 버퍼를 바인딩 한 경우에는 전부 해제해줘야 한다.

programID = LoadShaders("VertexShader.txt", "FragmentShader.txt");
glUseProgram(programID);

glGenVertexArrays(1, &VAO[0]);  // 1.할당 (앞에 인자는 1개 의미)
glBindVertexArray(VAO[0]);

glGenBuffers(1, &VBO[0]);  // 1.할당 (앞에 인자는 1개 의미)
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);

glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

...
...
...
glUseProgram(NULL);
glBindVertexArray(NULL);
glBindBuffer(GL_ARRAY_BUFFER, NULL);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, NULL);

 

 

300x250

댓글()

C/C++ 파일 이름 변경

300x250

 


아래 코드는 파일이름 변경 예제 입니다. 아래 2가지 방법중 하나를 사용하시면 됩니다.

아래 예제는 file.tmp 라는 파일을 file.xtf 로 확장자 / 이름 변경 하는 코드 입니다.

 

1. C 코드를 사용한 변환

CString full_path_tmp = GetExecutedPath() + _T("test/file.tmp");
CString full_path_xtf = full_path_tmp;        
full_path_xtf.Replace(_T(".tmp"), _T(".xtf"));


CStringA a_full_path_tmp = (CStringA)full_path_tmp;
CStringA a_full_path_xtf = (CStringA)full_path_xtf;

const char* char_path = a_full_path_tmp.GetBuffer();
const char* char_path_changed = a_full_path_xtf.GetBuffer();

rename(char_path, char_path_changed);

C 코드인 rename을 사용합니다.

해당 파라미터는 const char*를 인자로 사용하기 때문에 변환해서 넣어야 합니다.

장점은 오류 예외창이 안뜹니다.

 

 

2. MFC 코드는 사용한 변환

CString full_path_tmp = GetExecutedPath() + _T("test/file.tmp");
CString full_path_xtf = full_path_tmp;        
full_path_xtf.Replace(_T(".tmp"), _T(".xtf"));

CFile::Rename(full_path_tmp, full_path_xtf);

MFC 함수인 CFile::Rename 함수를 사용합니다.

해당 파라미터는 CString을 그대로 사용하시면 됩니다.

단점은 파일이 없을경우 오류 메시지창이 뜹니다.

 

 

간단하쥬 ㅋ

300x250

댓글()

C/C++ CString -> const char* 변환 (유니코드)

300x250

 

 

문자집합은 유니코드 기반 코드 입니다.

 

아래 코드는 CStringA로 형변환 후 GetBuffer()를 사용하여 변환하는 예제입니다.

CString file_name = _T("filename.dat");
CStringA a_file_name = (CStringA)file_name;

const char* ptr_name = a_file_name.GetBuffer();

 

아주 간단 하쥬 ㅋ

 

 

300x250

댓글()

C / C++ NaN 오류 및 숫자 판별

300x250

 

부동소수점 또는 0으로 나누게 되면 inf(양의 무한대), -inf(음의 무한대), -nan(ind)(숫자가 아님)이 발생 한다.

따라서 이를 예외처리하기 위한 함수로 std::isnan 함수가 있다.

 

 int isnan( float arg );
 int isnan( double arg );
 int isnan( long double arg );

 

 

사용 방법은 아래와 같다.

  만약 angle 이라는 변수를 체크 및 예외 처리 시

#include "math.h"

if(std::isnan(angle)) // 오류 발생 시
 {
       andgle = 0; // 예외처리
 }

 

 

300x250

댓글()