c-ize the bass-example a bit more
This commit is contained in:
parent
70bcea33ab
commit
76d3fc55f7
@ -73,35 +73,49 @@ void die(const char *fmt, ...)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define WINDOWED 1
|
|
||||||
const unsigned int width = 800;
|
const unsigned int width = 800;
|
||||||
const unsigned int height = 600;
|
const unsigned int height = 600;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ret = 0;
|
IDirect3D9 *d3d;
|
||||||
try
|
IDirect3DDevice9 *dev;
|
||||||
{
|
HWND hwnd;
|
||||||
// initialize directx
|
HSTREAM stream;
|
||||||
IDirect3D9 *d3d = Direct3DCreate9(D3D_SDK_VERSION);
|
|
||||||
if (NULL == d3d) throw std::string("update directx, fool.");
|
|
||||||
|
|
||||||
// create a window
|
static D3DPRESENT_PARAMETERS present_parameters = {
|
||||||
HWND hwnd = CreateWindowEx(0, "static", "GNU Rocket Example", WS_POPUP | WS_VISIBLE, 0, 0, width, height, 0, 0, GetModuleHandle(0), 0);
|
width, height, D3DFMT_X8R8G8B8, 3,
|
||||||
|
D3DMULTISAMPLE_NONE, 0, D3DSWAPEFFECT_DISCARD,
|
||||||
|
0, TRUE, 1, D3DFMT_D24S8, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
// create the device
|
struct sync_track *clear_r, *clear_g, *clear_b;
|
||||||
IDirect3DDevice9 *device = NULL;
|
struct sync_track *cam_rot, *cam_dist;
|
||||||
static D3DPRESENT_PARAMETERS present_parameters = {width, height, D3DFMT_X8R8G8B8, 3, D3DMULTISAMPLE_NONE, 0, D3DSWAPEFFECT_DISCARD, 0, WINDOWED, 1, D3DFMT_D24S8, 0, WINDOWED ? 0 : D3DPRESENT_RATE_DEFAULT, 0};
|
|
||||||
if (D3D_OK != d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters, &device))
|
|
||||||
throw std::string("could not create device. you computer SUCKS!");
|
|
||||||
|
|
||||||
// init BASS
|
/* initialize directx */
|
||||||
int soundDevice = 1;
|
d3d = Direct3DCreate9(D3D_SDK_VERSION);
|
||||||
if (!BASS_Init(soundDevice, 44100, 0, hwnd, 0)) throw std::string("failed to init bass");
|
if (!d3d)
|
||||||
|
die("update directx, fool.");
|
||||||
|
|
||||||
// load tune
|
/* create a window */
|
||||||
HSTREAM stream = BASS_StreamCreateFile(false, "tune.ogg", 0, 0, BASS_MP3_SETPOS | ((0 == soundDevice) ? BASS_STREAM_DECODE : 0));
|
hwnd = CreateWindowEx(0, "static", "GNU Rocket Example",
|
||||||
if (!stream) throw std::string("failed to open tune");
|
WS_POPUP | WS_VISIBLE, 0, 0, width, height, 0, 0,
|
||||||
|
GetModuleHandle(0), 0);
|
||||||
|
if (!hwnd)
|
||||||
|
die("failed to create window");
|
||||||
|
|
||||||
|
/* create the device */
|
||||||
|
if (FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
|
||||||
|
hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters,
|
||||||
|
&dev)))
|
||||||
|
die("could not create device. you computer SUCKS!");
|
||||||
|
|
||||||
|
/* init BASS */
|
||||||
|
if (!BASS_Init(-1, 44100, 0, hwnd, 0))
|
||||||
|
die("failed to init bass");
|
||||||
|
stream = BASS_StreamCreateFile(false, "tune.ogg", 0, 0, 0);
|
||||||
|
if (!stream)
|
||||||
|
die("failed to open tune");
|
||||||
|
|
||||||
sync_device *rocket = sync_create_device("sync");
|
sync_device *rocket = sync_create_device("sync");
|
||||||
if (!rocket)
|
if (!rocket)
|
||||||
@ -111,88 +125,76 @@ int main(int argc, char *argv[])
|
|||||||
sync_set_callbacks(rocket, &bass_cb, (void *)stream);
|
sync_set_callbacks(rocket, &bass_cb, (void *)stream);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// get tracks
|
/* get tracks */
|
||||||
struct sync_track
|
clear_r = sync_get_track(rocket, "clear.r");
|
||||||
*clearRTrack = sync_get_track(rocket, "clear.r"),
|
clear_g = sync_get_track(rocket, "clear.g");
|
||||||
*clearGTrack = sync_get_track(rocket, "clear.g"),
|
clear_b = sync_get_track(rocket, "clear.b");
|
||||||
*clearBTrack = sync_get_track(rocket, "clear.b"),
|
cam_rot = sync_get_track(rocket, "cam.rot"),
|
||||||
*camRotTrack = sync_get_track(rocket, "cam.rot"),
|
cam_dist = sync_get_track(rocket, "cam.dist");
|
||||||
*camDistTrack = sync_get_track(rocket, "cam.dist");
|
|
||||||
|
|
||||||
LPD3DXMESH cubeMesh = NULL;
|
LPD3DXMESH cubeMesh = NULL;
|
||||||
if (FAILED(D3DXCreateBox(
|
if (FAILED(D3DXCreateBox(dev, 1.0f, 1.0f, 1.0f,
|
||||||
device,
|
&cubeMesh, NULL)))
|
||||||
1.0f, 1.0f, 1.0f,
|
|
||||||
&cubeMesh, NULL
|
|
||||||
)))
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// let's roll!
|
/* let's roll! */
|
||||||
BASS_Start();
|
BASS_Start();
|
||||||
BASS_ChannelPlay(stream, false);
|
BASS_ChannelPlay(stream, false);
|
||||||
|
|
||||||
bool done = false;
|
bool done = false;
|
||||||
while (!done)
|
while (!done) {
|
||||||
{
|
|
||||||
double row = bass_get_row(stream);
|
double row = bass_get_row(stream);
|
||||||
sync_update(rocket, row);
|
sync_update(rocket, row);
|
||||||
|
|
||||||
// setup clear color
|
/* draw */
|
||||||
|
|
||||||
D3DXCOLOR clearColor(
|
D3DXCOLOR clearColor(
|
||||||
sync_get_val(clearRTrack, row),
|
sync_get_val(clear_r, row),
|
||||||
sync_get_val(clearGTrack, row),
|
sync_get_val(clear_g, row),
|
||||||
sync_get_val(clearBTrack, row),
|
sync_get_val(clear_b, row),
|
||||||
0.0
|
0.0
|
||||||
);
|
);
|
||||||
|
|
||||||
// paint the window
|
dev->BeginScene();
|
||||||
device->BeginScene();
|
dev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, clearColor, 1.0f, 0);
|
||||||
device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, clearColor, 1.0f, 0);
|
|
||||||
|
|
||||||
/* D3DXMATRIX world;
|
float rot = sync_get_val(cam_rot, row);
|
||||||
device->SetTransform(D3DTS_WORLD, &world); */
|
float dist = sync_get_val(cam_dist, row);
|
||||||
|
|
||||||
float rot = sync_get_val(camRotTrack, row);
|
|
||||||
float dist = sync_get_val(camDistTrack, row);
|
|
||||||
D3DXVECTOR3 eye(sin(rot) * dist, 0, cos(rot) * dist);
|
D3DXVECTOR3 eye(sin(rot) * dist, 0, cos(rot) * dist);
|
||||||
D3DXVECTOR3 at(0, 0, 0);
|
D3DXVECTOR3 at(0, 0, 0);
|
||||||
D3DXVECTOR3 up(0, 1, 0);
|
D3DXVECTOR3 up(0, 1, 0);
|
||||||
D3DXMATRIX view;
|
D3DXMATRIX view;
|
||||||
D3DXMatrixLookAtLH(&view, &(eye + at), &at, &up);
|
D3DXMatrixLookAtLH(&view, &(eye + at), &at, &up);
|
||||||
device->SetTransform(D3DTS_WORLD, &view);
|
dev->SetTransform(D3DTS_VIEW, &view);
|
||||||
|
|
||||||
D3DXMATRIX proj;
|
D3DXMATRIX proj;
|
||||||
D3DXMatrixPerspectiveFovLH(&proj, D3DXToRadian(60), 4.0f / 3, 0.1f, 1000.f);
|
D3DXMatrixPerspectiveFovLH(&proj, D3DXToRadian(60), 4.0f / 3, 0.1f, 1000.f);
|
||||||
device->SetTransform(D3DTS_PROJECTION, &proj);
|
dev->SetTransform(D3DTS_PROJECTION, &proj);
|
||||||
|
|
||||||
cubeMesh->DrawSubset(0);
|
cubeMesh->DrawSubset(0);
|
||||||
|
|
||||||
device->EndScene();
|
dev->EndScene();
|
||||||
device->Present(0, 0, 0, 0);
|
dev->Present(0, 0, 0, 0);
|
||||||
|
|
||||||
BASS_Update(0); // decrease the chance of missing vsync
|
BASS_Update(0); /* decrease the chance of missing vsync */
|
||||||
MSG msg;
|
MSG msg;
|
||||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||||
{
|
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
|
|
||||||
if (WM_QUIT == msg.message) done = true;
|
if (WM_QUIT == msg.message ||
|
||||||
if ((WM_KEYDOWN == msg.message) && (VK_ESCAPE == LOWORD(msg.wParam))) done = true;
|
(WM_KEYDOWN == msg.message &&
|
||||||
|
VK_ESCAPE == LOWORD(msg.wParam)))
|
||||||
|
done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BASS_StreamFree(stream);
|
BASS_StreamFree(stream);
|
||||||
BASS_Free();
|
BASS_Free();
|
||||||
|
|
||||||
device->Release();
|
dev->Release();
|
||||||
d3d->Release();
|
d3d->Release();
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
} catch (const std::exception &e) {
|
|
||||||
die(e.what());
|
|
||||||
} catch (const std::string &str) {
|
|
||||||
die(str.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user