I'm using DirectX11.1 in Visual studio 2013, developing a Windows 8 store App.
I've been trying for a couple of days to get my head around creating a 2D UI using DirectX, and just as I thought I might have got it, I'm coming across a unhandled exception I can't seem to shake.
"Unhandled exception at 0x002E2901 in First.exe: 0xC0000005: Access violation reading location 0x00000000."
Update: It seems that after 'd2dFactory->CreateDevice(dxgiDevice.Get(), &dev2d);' dev2d is coming out as null.
Update: Using HRESULT the create device method is giving the error "E_INVALIDARG".
(I've been following http://msdn.microsoft.com/en-us/library/windows/apps/hh780340.aspx )
Below is my code from the header and .cpp file. I haven't included anything past creating an ID2D1DeviceContex as this is where the error arises (it is only when I include it that the exception occurs.
.h
#pragma once
#include <d2d1.h>
#include <d2d1_1.h>
#include "DeviceResources.h"
#include "DirectXHelper.h"
using namespace Microsoft::WRL;
using namespace Windows::UI::Core;
using namespace Platform;
using namespace DirectX;
class CGame
{public:
ComPtr<ID3D11Device1> dev; // the device interface
ComPtr<ID3D11DeviceContext1> devcon; // the device context interface
ComPtr<IDXGISwapChain1> swapchain; // the swap chain interface
ComPtr<ID3D11RenderTargetView> rendertarget; // the render target interface
ComPtr<ID3D11Buffer> vertexbuffer; // the vertex buffer interface
ComPtr<ID3D11Buffer> vertexbuffer2; //For triangle
ComPtr<ID3D11Buffer> vertexbuffer3; //For laser
ComPtr<ID3D11Buffer> vertexbuffer4; //ship 2
ComPtr<ID3D11VertexShader> vertexshader; // the vertex shader interface
ComPtr<ID3D11PixelShader> pixelshader; // the pixel shader interface
ComPtr<ID3D11InputLayout> inputlayout; // the input layout interface
//2D Stuff
ComPtr<IDXGISurface> dxgiBackBuffer;
ComPtr<ID2D1Factory1> d2dFactory;
ComPtr<ID2D1Device> dev2d;
ComPtr<ID2D1DeviceContext> devcon2d;
ComPtr<ID2D1Bitmap1> targetBitmap;
ComPtr<ID2D1SolidColorBrush> pBlackBrush;
.cpp file
#include "pch.h"
#include "Game.h"
#include <fstream>
#include <process.h>
// Use some common namespaces to simplify the code
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::UI::Core;
using namespace Windows::UI::Popups;
using namespace Windows::System;
using namespace Windows::Foundation;
using namespace Windows::Graphics::Display;
using namespace Platform;
using namespace std;
// this function initializes and prepares Direct3D for use
void CGame::Initialize()
{
// Define temporary pointers to a device and a device context
ComPtr<ID3D11Device> dev11;
ComPtr<ID3D11DeviceContext> devcon11;
//Create Factory ID2D1Factory1
D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
__uuidof(ID2D1Factory1),
0,
&d2dFactory
);
// Create 3D device and device context objects
D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
nullptr,
0,
nullptr,
0,
D3D11_SDK_VERSION,
&dev11,
nullptr,
&devcon11);
// Convert the pointers from the DirectX 11 versions to the DirectX 11.1 versions
dev11.As(&dev);
devcon11.As(&devcon);
// obtain the DXGI factory
ComPtr<IDXGIDevice1> dxgiDevice;
dev.As(&dxgiDevice);
ComPtr<IDXGIAdapter> dxgiAdapter;
dxgiDevice->GetAdapter(&dxgiAdapter);
ComPtr<IDXGIFactory2> dxgiFactory;
dxgiAdapter->GetParent(__uuidof(IDXGIFactory2), &dxgiFactory);
//Create an ID2D1Device and an ID2D1DeviceContex
d2dFactory->CreateDevice(dxgiDevice.Get(), &dev2d);
DX::ThrowIfFailed(
dev2d->CreateDeviceContext(
D2D1_DEVICE_CONTEXT_OPTIONS_NONE,
&devcon2d
)
);
Any help would be greatly appreciated, and just in case there is any reason to view the code that follows:
// set up the swap chain description
DXGI_SWAP_CHAIN_DESC1 scd = { 0 };
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // how the swap chain should be used
scd.BufferCount = 2; // a front buffer and a back buffer
scd.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // the most common swap chain format
scd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // the recommended flip mode
scd.SampleDesc.Count = 1; // disable anti-aliasing
CoreWindow^ Window = CoreWindow::GetForCurrentThread(); // get the window pointer
// create the swap chain
dxgiFactory->CreateSwapChainForCoreWindow(
dev.Get(), // address of the device
reinterpret_cast<IUnknown*>(Window), // address of the window
&scd, // address of the swap chain description
nullptr, // advanced
&swapchain); // address of the new swap chain pointer
// get a pointer directly to the back buffer
ComPtr<ID3D11Texture2D> backbuffer;
swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), &backbuffer);
// create a render target pointing to the back buffer
dev->CreateRenderTargetView(backbuffer.Get(), nullptr, &rendertarget);
//Set up Direct2D render target bitmap, linking it to the swapchain
D2D1_PIXEL_FORMAT pixelFormat = { DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED };
D2D1_BITMAP_PROPERTIES1 bitmapProperties =
{ pixelFormat,
0,
0,
D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
0,
};
//Direct2D needs the dxgi version of the backbuffer surface pointer
swapchain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer));
//Get a D2D surface from the DXGI back buffer to use as the D2D render target.
devcon2d->CreateBitmapFromDxgiSurface(
dxgiBackBuffer.Get(),
&bitmapProperties,
&targetBitmap
);
//Now we can set the Direct2D render target
devcon2d->SetTarget(targetBitmap.Get());
//Create a brush for 2D
devcon2d->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::Black),
&pBlackBrush);
// set the viewport
D3D11_VIEWPORT viewport = { 0 };
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = Window->Bounds.Width;
viewport.Height = Window->Bounds.Height;
devcon->RSSetViewports(1, &viewport);
Update:
Output following error is: (There is a similar error output to this lurking around on stackoverflow, though it seems very much unresolved.
'First.exe' (Win32): Loaded 'C:\Users\Alec\Documents\Visual Studio 2013\Projects\First\Debug\First\AppX\First.exe'. Symbols loaded.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d2d1.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dxgi.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\DWrite.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\vccorlib120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\msvcp120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\msvcr120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\combase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel.appcore.dll'. Cannot find or open the PDB file.
The thread 0x22c0 has exited with code 0 (0x0).
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\twinapi.appcore.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\WinTypes.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\SHCore.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptsp.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rsaenh.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcrypt.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\uxtheme.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\actxprxy.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\MrmCoreR.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\BCP47Langs.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\Windows.UI.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ninput.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dwmapi.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\igd10umd32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.
Turns out I hadn't created my D3D11 Device to be compatible with Direct2D. The code below fixed it. Thanks to Trillian for the debugging aid, was incredibly helpful.
// This flag adds support for surfaces with a different color channel ordering than the API default.
// You need it for compatibility with Direct2D.
UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
// This array defines the set of DirectX hardware feature levels this app supports.
// The ordering is important and you should preserve it.
// Don't forget to declare your app's minimum required feature level in its
// description. All apps are assumed to support 9.1 unless otherwise stated.
D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1
};
D3D_FEATURE_LEVEL m_featureLevel;
// Create 3D device and device context objects
D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
nullptr,
creationFlags,
featureLevels,
ARRAYSIZE(featureLevels),
D3D11_SDK_VERSION,
&dev11,
&m_featureLevel,
&devcon11);
Related
I am new to C++ coding and in Visual studio environment. My simple code to find a sqrt of a number is being compiled and even run but the console disappears after taking number as input and I am left with the debugging messages and final message of Program terminated with exit code 0. Basically no output is shown.
#include <cmath>
#include <iostream>
int main()
{
double x{ 0.0 };
std::cout << "Enter x-";
std::cin >> x;
if (x >= 0)
std::cout << "\nSqrt(" << x << ") = " << std::sqrt(x) << std::endl;
else
std::cout << "\nWrong Value - cannot compute sqrt\n";
}
The code seems okay, it runs on online compilers. I have tried checking 'console' option from Linker->System->Sub-system->Console (/SUBSYSTEM:CONSOLE). But nothing works.
There are also certain debugging messages that seem to be generated some of them I am showing below -
......
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\CtxGraphicsHelper.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\setupapi.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\mmhook.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\Sfrhook.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\wtsapi32.dll'. Symbols loaded.
The thread 0x498 has exited with code 0 (0x0).
The thread 0x2500 has exited with code 0 (0x0).
The thread 0x30f0 has exited with code 0 (0x0).
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\ShellHook.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shell32.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\windows.storage.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shlwapi.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\SHCore.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\profapi.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\scardhook.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\twnhook.dll'. Cannot find or open the PDB file.
'Project2.exe' (Win32): Loaded 'C:\Program Files (x86)\Citrix\System32\cxinjime.dll'. Cannot find or open the PDB file.
The program '[10912] Project2.exe' has exited with code 0 (0x0).
I tried checking the Tools->debugging->symbols->Microsoft Symbol Servers. Some PDF files were found and some were not. I want to get to the root of this issue and basically get my program to behave the way as its coded with output console taking input and showing the result.
You can temporarily add a simple line at the end of code:
system("pause");
Don't forget to include: #include <cstdlib>
I'm starting to program and I'm using Visual Studio. I have this simple program that some days ago worked, but after working with another project, it returns me an error:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <math.h>
int main() {
double a = 3;
FILE *A;
scanf("%lf", &a);
A = fopen("B:\\Mis Documentos\\Coding\\Test 200.txt", "wt");
fprintf(A, "Hello World, I have %lf", a);
fclose(A);
}
But I can't compile it, it returns me this error. This is the log:
'Project1.exe' (Win32): Loaded 'B:\Mis Documentos\Documents\Visual Studio 2015\Projects\Project1\Debug\Project1.exe'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140d.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbased.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-timezone-l1-1-0.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-file-l2-1-0.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-localization-l1-2-0.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-synch-l1-2-0.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-processthreads-l1-1-1.dll'. Symbols loaded.
'Project1.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-file-l1-2-0.dll'. Symbols loaded.
Debug Assertion Failed!
Program: ...ments\Visual Studio 2015\Projects\Project1\Debug\Project1.exe
File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp
Line: 31
Expression: stream != nullptr
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
You're not checking if the file was actually opened. You should check if file was actually opened after calling fopen
FILE *A = NULL;
....
A = fopen("B:\\Mis Documentos\\Coding\\Test 200.txt", "wt");
//Check if file was actually opened
if(A) {
....
}
Check documentation on this function, for example here. You should also initialize A variable, it's a good practice.
At the end it was my fault, I didn't create the folder "Coding" where I wanted the file. I can finish what I wanted to do now, but I saw that if I want to create the file in my Google Drive folder, sometimes works an others don't. Not sure why, maybe because it's connected to internet?
Anyway, thanks a lot for your fast help!
I've try to compile this code with Visual Studio 2012 but I get the errors below. How can I fix that? And they are due to what? However the program run fine but in singlethreaded mode.
#include <stdio.h>
#include <time.h>
#include <omp.h>
int main() {
double start, end;
double runTime;
start = omp_get_wtime();
int num = 1,primes = 0;
int limit = 1000000;
#pragma omp parallel for schedule(dynamic) reduction(+ : primes)
for (num = 1; num <= limit; num++) {
int i = 2;
while(i <= num) {
if(num % i == 0)
break;
i++;
}
if(i == num)
primes++;
// printf("%d prime numbers calculated\n",primes);
}
end = omp_get_wtime();
runTime = end - start;
printf("This machine calculated all %d prime numbers under %d in %g seconds\n",primes,limit,runTime);
return 0;
}
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Users\Administrator\Documents\Visual Studio 2012\Projects\ConsoleApplication4\x64\Debug\ConsoleApplication4.exe'. Symbols loaded.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\msvcp110d.dll'. Symbols loaded.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\msvcr110d.dll'. Symbols loaded.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\vcomp110d.dll'. Symbols loaded.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\user32.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\gdi32.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\lpk.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\usp10.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\imm32.dll'. Cannot find or open the PDB file.
'ConsoleApplication4.exe' (Win32): Loaded 'C:\Windows\System32\msctf.dll'. Cannot find or open the PDB file.
The thread 0x11f0 has exited with code -1073741510 (0xc000013a).
The program '[4908] ConsoleApplication4.exe' has exited with code -1073741510 (0xc000013a).
I'm fairly new to Visual studios and C++ as well. I've been trying to get the Sierpinski Gasket example from Interactive Computer Graphics A Top-Down Approach with OpenGL by Ed Angels, specifically the Chapter 2 Example 1 Visual C++ Project, and I've ran into to some problems that I can't seem to solve or find a solution to. The problem I have is when I run it in VS2012 the window immediately closes with error something along the lines of it couldn't find vshader21.glsl. When I run it from the 6E Test.exe in the debug folder it opens fine, creates a window but it doesn't show any of the triangles, just a blank white box. I have downloaded the latest versions of GLEW and freeglut and I'm positive I put everything in the right place.
The example project includes: Angel.h, vec.h, mat.h, CheckError.h, example1.cpp, InitShader.cpp, vshader21.glsl, and fshader21.glsl
I believe the error is coming from the example1.cpp with the line GLuint program = InitShader( "vshader21.glsl", "fshader21.glsl" ); not finding the files ut i have added both the .glsl to the debug folder and changed the path to go to the debug folder in the Working Directory of the project properties. Any Suggestions or solutions as to how i can fix this?
#include "Angel.h"
const int NumPoints = 5000;
void
init( void )
{
vec2 points[NumPoints];
// Specifiy the vertices for a triangle
vec2 vertices[3] = {
vec2( -1.0, -1.0 ), vec2( 0.0, 1.0 ), vec2( 1.0, -1.0 )
};
// Select an arbitrary initial point inside of the triangle
points[0] = vec2( 0.25, 0.50 );
// compute and store N-1 new points
for ( int i = 1; i < NumPoints; ++i ) {
int j = rand() % 3; // pick a vertex at random
// Compute the point halfway between the selected vertex
// and the previous point
points[i] = ( points[i - 1] + vertices[j] ) / 2.0;
}
// Create a vertex array object
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
// Create and initialize a buffer object
GLuint buffer;
glGenBuffers( 1, &buffer );
glBindBuffer( GL_ARRAY_BUFFER, buffer );
glBufferData( GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW );
// Load shaders and use the resulting shader program
GLuint program = InitShader( "vshader21.glsl", "fshader21.glsl" );
glUseProgram( program );
// Initialize the vertex position attribute from the vertex shader
GLuint loc = glGetAttribLocation( program, "vPosition" );
glEnableVertexAttribArray( loc );
glVertexAttribPointer( loc, 2, GL_FLOAT, GL_FALSE, 0,
BUFFER_OFFSET(0) );
glClearColor( 1.0, 1.0, 1.0, 1.0 ); // white background
}
void
display( void )
{
glClear( GL_COLOR_BUFFER_BIT ); // clear the window
glDrawArrays( GL_POINTS, 0, NumPoints ); // draw the points
glFlush();
}
void
keyboard( unsigned char key, int x, int y )
{
switch ( key ) {
case 033:
exit( EXIT_SUCCESS );
break;
}
}
int
main( int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGBA );
glutInitWindowSize( 512, 512 );
// If you are using freeglut, the next two lines will check if
// the code is truly 3.2. Otherwise, comment them out
glutInitContextVersion( 3, 1 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutCreateWindow( "Sierpinski Gasket" );
glewInit();
init();
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}
UPDATE this is what it tells me when I press F5 to run it.
my version of GLEW is 1.10.0 and freeglut is 2.8.1-1
'6E test.exe' (Win32): Loaded 'C:\Users\Robert\Documents\6E test\Debug\6E test.exe'. Symbols loaded.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Users\Robert\Documents\6E test\Debug\freeglut.dll'. Module was built without symbols.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\lpk.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\usp10.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\opengl32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\glu32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ddraw.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dciman32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\setupapi.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\devobj.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dwmapi.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Users\Robert\Documents\6E test\Debug\glew32.dll'. Module was built without symbols.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110d.dll'. Symbols loaded.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110d.dll'. Symbols loaded.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nvinit.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\uxtheme.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ig7icd32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\version.dll'
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\ole32.dll'
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Cannot find or open the PDB file.
'6E test.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\ole32.dll'
'6E test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\clbcatq.dll'. Cannot find or open the PDB file.
The program '[6244] 6E test.exe' has exited with code 1 (0x1).
You cannot use single-buffered windowed drawing in newer versions of Microsoft Windows, with Desktop Composition enabled. Even after you get your shader loading mechanism working correctly, you are going to run into a much bigger issue, where the ouput is not visible. In fact judging by your problem description I think you already are encountering this issue.
Please have a look at this question for a more detailed explanation of the problem and the solution.
I need your help. All day Im trying to figure out why I get this error, but nothing comes to my mind. The thing that I want my program to do is to take a png image and slice it to tiles, that i could use later for making a map.
So, anyone could help me with this error?
#include "SDL.h"
#include "SDL_image.h"
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#pragma comment(lib, "SDL_image.lib")
int main(int argc,char *argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface *screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
IMG_Init(IMG_INIT_PNG);
SDL_Surface *mapTileSet;
mapTileSet = IMG_Load("map.png");
SDL_Surface *myTiles[4];
for(int i = 0; i < 3; i++)
myTiles[i] = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, 32, 32, 32, 0, 0, 0, 0);
for(int y = 0; y < 3; y++)
{
for(int x = 0; x < 3; x++)
{
int slice_x = x * 32;
int slice_y = y * 32;
SDL_Rect srcRect;
srcRect.x = slice_x;
srcRect.y = slice_y;
srcRect.w = 32;
srcRect.h = 32;
SDL_Rect dstRect;
dstRect.x = 0;
dstRect.y = 0;
int i = x + y * 4;
SDL_BlitSurface(mapTileSet, &srcRect, myTiles[i], &dstRect);
}
}
SDL_BlitSurface(myTiles[0], 0, screen, 0);
SDL_Flip(screen);
SDL_Delay(10000);
IMG_Quit();
SDL_Quit();
return 0;
}
Debug log:
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\Debug\project.exe', Symbols loaded.
'project.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Program Files\AVAST Software\Avast\snxhk.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\SDL.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Windows\System32\advapi32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\sechost.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\rpcrt4.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\gdi32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\lpk.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\usp10.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\winmm.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\SDL_image.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Windows\System32\msvcr100d.dll', Symbols loaded.
'project.exe': Loaded 'C:\Windows\System32\imm32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msctf.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ddraw.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dciman32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\setupapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cfgmgr32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\oleaut32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ole32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\devobj.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\ddraw.dll'
'project.exe': Unloaded 'C:\Windows\System32\dwmapi.dll'
'project.exe': Unloaded 'C:\Windows\System32\setupapi.dll'
'project.exe': Unloaded 'C:\Windows\System32\devobj.dll'
'project.exe': Unloaded 'C:\Windows\System32\oleaut32.dll'
'project.exe': Unloaded 'C:\Windows\System32\ole32.dll'
'project.exe': Unloaded 'C:\Windows\System32\cfgmgr32.dll'
'project.exe': Unloaded 'C:\Windows\System32\dciman32.dll'
'project.exe': Loaded 'C:\Windows\System32\uxtheme.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\KBDUS.DLL', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\KBDUS.DLL'
'project.exe': Loaded 'C:\Windows\System32\KBDUS.DLL', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\KBDUS.DLL'
'project.exe': Loaded 'C:\Windows\System32\dsound.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ole32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\powrprof.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\setupapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cfgmgr32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\oleaut32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\devobj.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dinput.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\hid.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\wintrust.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\crypt32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msasn1.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cryptbase.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\libpng15-15.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\zlib1.dll', Binary was not built with debug information.
First-chance exception at 0x681247e3 in project.exe: 0xC0000005: Access violation reading location 0xccccccf8.
Unhandled exception at 0x681247e3 in project.exe: 0xC0000005: Access violation reading location 0xccccccf8.
The thread 'Win32 Thread' (0xd94) has exited with code -805306369 (0xcfffffff).
The thread 'Win32 Thread' (0x12f8) has exited with code -805306369 (0xcfffffff).
The program '[3568] project.exe: Native' has exited with code -805306369 (0xcfffffff).
You are creating tiles like this:
for(int i = 0; i < 3; i++)
myTiles[i] = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, 32, 32, 32, 0, 0, 0, 0);
Where i will equal 0, 1, and 2
But accessing them like this:
int i = x + y * 4;
SDL_BlitSurface(mapTileSet, &srcRect, myTiles[i], &dstRect);
Where x and y will each be 0, 1, and 2. Once y is greater than 0 you will be accessing invalid data.
In general, the i = x+y*4 statement seems malformed with respect to the containing loops as it will generate the sequence {0, 1, 2, 4, 5, 6, 8, 9, 10} which omits elements 3 and 7.