전체 글

개발은 좋은데 뭘로 개발할까
CS/HCI 윈도우즈프로그래밍

[OpenGL] 8. Shader (4) - GLSL

GLSL GLSL은 GL Shader Language 의 약자로, 셰이더 프로그래밍을 위한 C 기반의 언어이다. 대표적인 사용 방법은 아래와 같다. #version version_number // Open GL 버전 in type in_variable_name; in type in_variable_name2; // 셰이더에 들어오는 입력 변수 out type out_variable_name; // 셰이더가 처리한 뒤 내보내는 출력 변수 uniform type uniform_name; // 모든 정점에 대해 동일하게 사용되는 전역 변수 void main() { out_variable_name = weird_stuff_we_processed; } GLSL 데이터 타입 GLSL은 대부분의 C 데이터 타입을 지..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 6. Security

이번 글에서는 네트워크 보안에 대해 간단하게 정리하고자 한다. 원래 인터넷은 미국의 군사용 네트워크로 만들어졌다. 군 내부적으로 데이터를 주고받기 위해 만들어졌다보니, 당연히 군 내부에서 폐쇄적으로 사용이 되었기에 처음에는 보안에 관심이 없었다. (서로 알고있는 군 관계자끼리 데이터를 주고 받았기 때문이다) 하지만 인터넷이 밖으로 나와 상업적 목적에 의해 세계적으로 보급되기 시작하면서 보안 문제가 대두되기 시작했다. 인터넷이라는 인프라를 통해 흐르는 데이터를 임의로 조작하거나, 데이터의 흐름을 통제하여 이익을 얻고자 하는 사람들이 등장했다. 따라서 이 문제를 해결하기 위해 보안 솔루션이 등장하기 시작했다. 초기 인터넷은 보안 개념을 고려하여 설계되지 않았기 때문에, 이후에 나온 보안 개념은 이 인터넷의 ..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 7. Shader (3) - EBO (Element Buffer Object)

지난 글에서는 VBO 와 VAO 를 사용하여 삼각형을 그리는 방법에 대해 정리하였다. 이번 글에서는 EBO를 사용하여 정점 데이터를 중복으로 사용하지 않도록 하는 과정을 정리한다. 먼저 지난 예제를 토대로 사각형을 그리는 예제를 아래와 같이 작성하였다. #include #include unsigned int createAndCompileShader(GLenum shaderEnum, const char* shaderSourceCode); unsigned int createShaderProgramWithShaders(unsigned int vertexShader, unsigned int fragmentShader); const char* VertexShaderSourceCode = "#version 330 ..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 6. Shader (2) - VAO

지난 글에서는 셰이더의 개념과 만드는 방법 그리고 셰이더 넘길 데이터가 담기는 버퍼를 만들어서 데이터와 연결하는 과정까지 정리하였다. 이번 글에서는 버퍼에 있는 데이터를 어떻게 셰이더로 넘길지 정의하는 VAO에 대해서 정리해보고자 한다. Vertex Attribute Pointer 지난 시간에 만든 VBO ( Vertex Buffer Object ) 에는 셰이더 넘길 전체 데이터가 들어가 있었다. float vertices[] = { -0.5f, -0.5f, 0.0f, // vertex 1 0.5f, -0.5f, 0.0f, // vertex 2 0.0f, -0.5f, 0.0f, // vertex 3 -0.5f, 0.5f, 0.0f // vertex 4 }; 가령 이 코드를 보면, 삼각형을 만드는데 사용할..

CS/컴퓨터 구조

[컴퓨터 구조] 4. MIPS Data Transfer Instructions (1)

Data Transfer Instructions CPU 내부의 레지스터는 32개밖에 없다. 만약 4byte 데이터 배열 100개를 선언하는 것과 같이 레지스터의 저장 공간을 넘어서는 용량이 필요한 경우, 메모리를 활용해야 한다. 따라서 MIPS 모든 CPU는 레지스터와 메모리 사이에 데이터를 주고 받을 수 있는 명령어를 제공한다. 메모리에 데이터를 쓰는 동작은 Store (Write) 라고 한다. 메모리에서 데이터를 읽는 동작은 Load (Read) 라고 한다. 메모리에 접근할 때는 메모리 주소를 사용해야 하는데, 메모리 주소는 메모리 공간의 8bit = 1 byte 마다 하나의 주소값을 가진다. (이를 byte - addressable 하다고 한다.) 레지스터와 메모리 사이에 데이터를 주고받을 때는, ..

CS/컴퓨터 구조

[컴퓨터 구조] 3. MIPS Arithmetic & Logical Instruction

MIPS 명령어의 포맷 명령어 하나는 결국 컴퓨터라는 기계가 이해하기 위해 32bit 의 0과 1의 조합으로 나타내야한다. 32bit 의 공간 안에 이 명령어가 어떤 명령어인지, 어떤 데이터를 가지고 명령어를 실행하는지를 기술한다. 이를 위해 32bit 명령어의 어디부터 어디까지 어떤 데이터를 담을지 형식을 정의해두었는데 이를 명령어 포맷이라고 한다. MIPS 명령어는 R-format, I-format, J-format 이렇게 3가지 포맷이 존재한다. ( MIPS의 설계 원칙 중 좋은 디자인을 위해 타협이 필요하다는 원칙에 입각하여, 편의를 위해 명령어 포맷을 1가지로 통일하기보다 3가지로 구분하는 쪽으로 타협을 본 것이다.) 이번 글에서는 R-formant, I-format 2가지를 살펴보며, 그 중 ..

CS/컴퓨터 구조

[컴퓨터 구조] 2. Clock & Verilog

Clock 사람이 오후 5시, 오전 9시와 같은 시간을 기준으로 모임, 약속, 회의와 같은 행위 시간을 잡듯, 컴퓨터의 모든 부품들도 하나의 기준 시간에 따라 돌아가며 단위 부품들이 실행되어야 한다. (이를 '모듈간의 동기화' 라고 한다.) 따라서 각 부품들이 실행될 타이밍을 기술할 시간 단위가 필요하다. 하지만 컴퓨터는 사람이 사용하는 24시간, 60분, 60초의 단위를 그대로 이해할 수 없다. 그래서 컴퓨터 부품들을 위한 전용 시계를 만들어두었는데, 이를 '클럭' 이라고 한다. 클락은 말 그대로 시계처럼 똑딱똑딱하듯 일정한 주기로 0, 1의 신호가 번갈아 나오는 파형이다. 모든 컴퓨터 부품은 이 클럭 주기에 맞춰 움직이기 때문에, 클럭 주기가 높을수록, 컴퓨터 부품이 움직이는 속도도 빨라진다. (그래..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 5. Shader (1) - Shader, VBO, Shader Program

이번 글에서는 셰이더에 대해 더 자세한 사용법을 정리하고자 한다. 지난 글에서 셰이더는 그래픽스 스테이지에서 실행되는 작은 프로그램을 의미한다고 하였다. 대표적으로 이 수업에서 다룰 셰이더는 Vertext Shader, Fragment Shader 2가지 이다. Vertex Shader 사용 예 모든 셰이더 프로그램은 GLSL 이라는 별도의 언어를 사용한다고 하였다. Vertex Shader 는 일반적으로 아래 형태로 사용하는데, 각 코드를 뜯어서 설명해보려고 한다. const char* vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "void main()\n" "{\n" " gl_Position = v..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 5. Performance (loss, delay, throughput)

패킷과 큐 하나의 라우터로 들어오는 패킷은 여러 종류가 있을 수 있다. 이때 라우터는 패킷을 들어오는 순서대로 처리하기 위해 큐에 패킷을 보관한다. 물리적으로는 라우터의 버퍼에 보관하는 것과 같다. (라우터도 일종의 컴퓨터라고 생각하면 된다.) 이 버퍼의 크기는 당연히 물리적으로 제한이 있다. 따라서 패킷이 전송되는데 걸리는 시간(transmission delay) 에 비해 라우터로 패킷이 들어오는 시간이 더 빠르다면 큐에는 전송을 기다리는 패킷들이 차곡차곡 쌓이게 된다. (queueing delay) 이때 패킷들이 가득차서 라우터의 버퍼 크기를 넘어서게 되면, 그때부터 도착하는 패킷들은 저장되지 못해 버려진다. 이를 Loss, 손실이 발생하였다고 표현한다. Packet Delay 지금까지의 내용을 토대..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 4. Graphics Pipeline

오늘은 GL 에서 중요한 기본 개념인 Graphics pipeline에 대해 정리하고자 한다. 지난 글에서 프레임 버퍼를 설명할 때, 그래픽 프로그램이 적절히 처리한 데이터를 프레임 버퍼에 저장하면, 프레임 버퍼에 저장된 데이터를 비디오 컨트롤러가 가져다가 화면에 출력할 수 있는 데이터로 변환해준다고 했다. 이제 구체적으로 그래픽 프로그램이 어떻게 '적절히 처리' 하는지 과정을 살펴보자. 먼저 프레임 버퍼에 데이터를 저장하기까지 처리하는 큰 흐름은 위와 같다. 이 흐름을 따라가려면 먼저 Vertex 에 대한 이야기를 해야한다. 이를 위해 OpenGL 의 기본 용어 4가지를 정리해보자. Open GL 기본 용어 Primitive : 원시적인 이라는 뜻 그대로, 렌더링의 기반이 되는 기본 단위(점, 선, 삼..

에버듀
Blog. 에버듀