質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

303閲覧

GlutからWGLへの移植における初期化

Weapon

総合スコア106

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/25 14:14

前提・実現したいこと

WGLによる描画サンプルが少ないためどうしてもglutから描画サンプルを持ってくるしかないのですが色の初期化がうまくいきません.
Glut ポリゴンの表示の一番上のサンプルのgl関数を使いましたが白になるであろうところが赤色になってしまいます.他のサンプルも同様です.何が不足しているのでしょうか?
またGlutからWGLの移植の上で主に何に気を付けなければならないですか?

該当のソースコード

以前の質問より変更があるのはGLLoop.cppのコメントエリア周辺です.

C

1//GLLoop.cpp 2 3#ifndef UNICODE 4#define UNICODE 5#endif UNICODE 6 7#include "GLLoop.h" 8 9 10DWORD WINAPI GLLoop(LPDWORD lpdata) { 11 12 PassHandle *ph = (PassHandle *)lpdata; 13 HWND thwnd = ph->hwnd; 14 15 HDC hdc; 16 HGLRC glrc; 17 int tWidth; 18 int tHeight; 19 20 21 { 22 RECT rc; 23 24 GetClientRect(thwnd, &rc); 25 tWidth = rc.right - rc.left; 26 tHeight = rc.bottom - rc.top; 27 28 hdc = GetDC(thwnd); 29 30 PIXELFORMATDESCRIPTOR pfd = { 31 sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_COLORINDEX, 32 8, 33 0, 0, 0, 0, 0, 0, 0, 0, 34 0, 35 0, 0, 0, 0, 36 16, 0, 0, 0, 0, 37 0, 0, 0 38 }; 39 40 int format = ChoosePixelFormat(hdc, &pfd); 41 42 if (format == 0) { 43 MessageBox(thwnd, L"Failed to ChoosePixelFormat", L"CAUTION", MB_OK); 44 _endthreadex(1); 45 return 1; 46 } 47 48 if (SetPixelFormat(hdc, format, &pfd) == FALSE) { 49 MessageBox(thwnd, L"Failed to SetPixelFormat", L"CAUTION", MB_OK); 50 _endthreadex(1); 51 return 1; 52 } 53 54 glrc = wglCreateContext(hdc); 55 56 if (glrc == NULL) { 57 MessageBox(thwnd, L"Failed to wglCreateContext", L"CAUTION", MB_OK); 58 _endthreadex(1); 59 return 1; 60 } 61 62 wglMakeCurrent(hdc, glrc); 63 64 /* GL Initialize Script */ 65 //NO CONTENTS 66 /* up to here */ 67 68 } 69 70 MSG tMsg = {}; 71 72 while (true) { 73 74 while (PeekMessage(&tMsg, NULL, 0, 0, PM_REMOVE) > 0) 75 { 76 switch (tMsg.message) 77 { 78 case TM_SIZE: 79 { 80 tWidth = GET_X_LPARAM(tMsg.lParam); 81 tHeight = GET_Y_LPARAM(tMsg.lParam); 82 83 glViewport(0, 0, tWidth, tHeight); 84 } 85 break; 86 case TM_DESTROY: 87 goto end; 88 } 89 } 90 91 /* GL Script */ 92 93 glClear(GL_COLOR_BUFFER_BIT); 94 95 glBegin(GL_TRIANGLES); 96 glVertex2f(0, 0); 97 glVertex2f(-1, 0.9); 98 glVertex2f(1, 0.9); 99 100 glVertex2f(0, 0); 101 glVertex2f(-1, -0.9); 102 glVertex2f(1, -0.9); 103 glEnd(); 104 105 106 SwapBuffers(hdc); 107 108 /* up to here */ 109 } 110end: 111 112 { 113 wglDeleteContext(glrc); 114 ReleaseDC(thwnd, hdc); 115 _endthreadex(0); 116 } 117 118 return 0; 119}

C

1//main.cpp 2 3#define UNICODE 4 5#include <windows.h> 6#include <process.h> 7#include "GLLoop.h" 8 9LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); 10 11const wchar_t CLASS_NAME[] = L"CLASS"; 12 13int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR nCmdLine, int nCmdShow) { 14 UNREFERENCED_PARAMETER(hPrevInstance); 15 UNREFERENCED_PARAMETER(nCmdLine); 16 17 WNDCLASSEX wc = { 18 sizeof(WNDCLASSEX),CS_VREDRAW | CS_HREDRAW, WindowProc, 19 0, 0, hInstance, 20 NULL, (HCURSOR)LoadCursor(NULL,IDC_ARROW), (HBRUSH)GetStockObject(WHITE_BRUSH), 21 NULL, CLASS_NAME, NULL 22 }; 23 24 RegisterClassEx(&wc); 25 26 HWND hwnd = CreateWindowEx( 27 0, CLASS_NAME, L"Template", WS_OVERLAPPEDWINDOW, 28 50, 50, 960, 525, 29 NULL, NULL, hInstance, NULL 30 ); 31 32 ShowWindow(hwnd, nCmdShow); 33 UpdateWindow(hwnd); 34 35 MSG msg = {}; 36 37 while (GetMessage(&msg, NULL, 0, 0) != 0) { 38 TranslateMessage(&msg); 39 DispatchMessage(&msg); 40 } 41 42 return (int)msg.wParam; 43} 44 45LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { 46 static unsigned thId; 47 static RECT rc; 48 static HANDLE ht; 49 switch (uMsg) { 50 case WM_ERASEBKGND: 51 return -1; 52 53 case WM_CREATE: 54 { 55 static PassHandle mph; 56 mph.hwnd = hwnd; 57 ht = (HANDLE)_beginthreadex(NULL, 0, (_beginthreadex_proc_type)GLLoop, &mph, 0, &thId); 58 59 DWORD dwExCode; 60 while (GetExitCodeThread(ht, &dwExCode) && dwExCode == STILL_ACTIVE && !PostThreadMessage(thId, WM_NULL, 0, 0))Sleep(1); 61 } 62 break; 63 64 case WM_PAINT: 65 { 66 PAINTSTRUCT ps = {}; 67 BeginPaint(hwnd, &ps); 68 EndPaint(hwnd, &ps); 69 } 70 break; 71 72 case WM_SIZE: 73 { 74 GetClientRect(hwnd, &rc); 75 PostThreadMessage(thId, TM_SIZE, 0, MAKELPARAM(rc.right - rc.left, rc.bottom - rc.top)); 76 } 77 break; 78 79 case WM_DESTROY: 80 { 81 PostThreadMessage(thId, TM_DESTROY, 0, 0); 82 WaitForSingleObject(ht, INFINITE); 83 PostQuitMessage(0); 84 } 85 return 0; 86 } 87 88 return DefWindowProc(hwnd, uMsg, wParam, lParam); 89}

C

1//GLLoop.h 2#pragma once 3 4#pragma comment(lib,"opengl32.lib") 5#pragma comment(lib,"glu32.lib") 6 7#include <Windows.h> 8#include <windowsx.h> 9#include <process.h> 10#include <gl/GL.h> 11#include <gl/GLU.h> 12 13#define TM_DESTROY WM_APP + WM_DESTROY 14#define TM_SIZE WM_APP + WM_SIZE 15 16typedef struct _tagPassHandle{ 17 HWND hwnd; 18}PassHandle; 19 20DWORD WINAPI GLLoop(LPDWORD lpdata);

補足情報

Windows10 Pro
VisualStudio2017 Community

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

c

1 PIXELFORMATDESCRIPTOR pfd = { 2 sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, 3 PFD_TYPE_COLORINDEX, // iPixelType 4 8, // cColorBits 5 0, 0, 0, 0, 0, 0, 0, 0, 6 0, 7 0, 0, 0, 0, 8 16, 0, 0, 0, 0, 9 0, 0, 0 10 };

(わかりやすいようにコメントを入れています)

iPixelTypePFD_TYPE_COLOR_INDEXで、cColorBits8なのは、何か意図があっての事なのでしょうか。
使った事がありませんが、言葉からして256階調インデックスカラーですから、RGB(A)で描画されたOpenGLのレンダリングがどのように反映されるか、わかりません。しっかり把握したほうがよろしいかと思います。

特に意図していないのであれば、PFD_TYPE_RGBA/32にした方がいいのではないでしょうか。

投稿2019/03/26 15:00

katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問