Am I just retarded or what?

Started by
26 comments, last by OneThreeThreeSeven 13 years, 4 months ago
I'm not sure whose post you consider condescending... nothing I see as particularly offensive.

Further, it's not exactly unreasonable to assume that someone doesn't have a lot of programming skills who has posted in For Beginners...
Advertisement
Quote:
I've noticed people in this forum are quite condescending. They always assume that the person asking the questions is a dunderhead. So please can you guys stop being elitists for once, I know you guys are good at coding and stuff but that doesn't give you the rights to be ***hats. This guy mentioned a general problem and everyone just seems to be demeaning his programming skills.

You're free to hold that opinion, but the way I see it people here are being concise. This isn't an emotional thing, it is a way of cutting out a lot of rendundant language and leaving the core message intact. It can be read as very blunt, almost on the cusp of being offensive at times, if you aren't used to the emotionless tone. A more detailed discussion.

Read the ideas in the post, and judge it on that. Any emotional tone you get from the message could be unintended, or misinterpreted.

I don't see any cases where anyone is demeaning his programming skills - just people emphasising the importance of error checking.
Quote:Original post by falconandeagle
I've noticed people in this forum are quite condescending. They always assume that the person asking the questions is a dunderhead. So please can you guys stop being elitists for once, I know you guys are good at coding and stuff but that doesn't give you the rights to be ***hats. This guy mentioned a general problem and everyone just seems to be demeaning his programming skills.

@OP: I agree with you man, I am still looking for that elusive DirectX book. I actually just gave up and started reading msdn documentation on DirectX. That actually seems to be more helpful than any book I've read on DirectX. I've also extensively searched the web for DirectX tutorials and after dabbling in it by myself for quite some time I now understand the basics. After you have learn the basics, then and only then can you pick up a DirectX book.


Nah I don't have a problem with anyone here lol. I just have a problem with DIRECTX... :D

But it took me all day just to setup a 800x600 window w/ a triangle in it.

It's finally starting to sink in that you have to do EVERYTHING with DirectX.
They hated on Jeezus, so you think I give a f***?!
Quote:Original post by falconandeagle
I've noticed people in this forum are quite condescending. They always assume that the person asking the questions is a dunderhead. So please can you guys stop being elitists for once, I know you guys are good at coding and stuff but that doesn't give you the rights to be ***hats. This guy mentioned a general problem and everyone just seems to be demeaning his programming skills.

@OP: I agree with you man, I am still looking for that elusive DirectX book. I actually just gave up and started reading msdn documentation on DirectX. That actually seems to be more helpful than any book I've read on DirectX. I've also extensively searched the web for DirectX tutorials and after dabbling in it by myself for quite some time I now understand the basics. After you have learn the basics, then and only then can you pick up a DirectX book.


Nah I don't have a problem with anyone here lol. I just have a problem with DIRECTX... :D

But it took me all day just to setup a 800x600 window w/ a triangle in it.

It's finally starting to sink in that you have to do EVERYTHING with DirectX.

And also, what about .fx shader files? What can I do if I don't know that language?
They hated on Jeezus, so you think I give a f***?!
You'll have to learn it -- it's not terribly difficult, the syntax is superficially very C like and the concepts that underpin the language itself aren't too difficult. The SDK documentation isn't very good for learning about it, though, I've found -- it's one of the weaker areas.
I bought several books on DX and every one of them stink. I eventually went to OpenGL and found the examples worked much better and is easier for me to understand. DX never seemed to make sense to me so I dropped it. Since I program for myself, I can do that kind of thing.

As far as error trapping, I like the style that shows the code without it first, then progress to the same code with error trapping. That way a learner can absorb the process better. Least it worked that way for me.

I think everyone feels somewhat retarded when they are learning any code from scratch. It's hard. ;-)
Modified sample code:

//--------------------------------------------------------------------------------------// File: Tutorial02.cpp//// This application displays a triangle using Direct3D 10//// Copyright (c) Microsoft Corporation. All rights reserved.//--------------------------------------------------------------------------------------#include <windows.h>#include <d3d10.h>#include <d3dx10.h>#include "resource.h"//--------------------------------------------------------------------------------------// Structures//--------------------------------------------------------------------------------------struct myVertex{	D3DXVECTOR3 pos;};//--------------------------------------------------------------------------------------// Global Variables//--------------------------------------------------------------------------------------HINSTANCE               g_hInst = NULL;HWND                    g_hWnd = NULL;D3D10_DRIVER_TYPE       g_driverType = D3D10_DRIVER_TYPE_NULL;ID3D10Device*           g_pd3dDevice = NULL;IDXGISwapChain*         g_pSwapChain = NULL;ID3D10RenderTargetView* g_pRenderTargetView = NULL;ID3D10Effect*           g_pEffect = NULL;ID3D10EffectTechnique*  g_pTechnique = NULL;ID3D10InputLayout*      g_pVertexLayout = NULL;ID3D10Buffer*           g_pVertexBuffer = NULL;//--------------------------------------------------------------------------------------// Forward declarations//--------------------------------------------------------------------------------------HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );HRESULT InitDevice();void CleanupDevice();LRESULT CALLBACK    WndProc( HWND, UINT, WPARAM, LPARAM );void Render();//--------------------------------------------------------------------------------------// Entry point to the program. Initializes everything and goes into a message processing // loop. Idle time is used to render the scene.//--------------------------------------------------------------------------------------int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ){    UNREFERENCED_PARAMETER( hPrevInstance );    UNREFERENCED_PARAMETER( lpCmdLine );    if( FAILED( InitWindow( hInstance, nCmdShow ) ) )        return 0;    if( FAILED( InitDevice() ) )    {        CleanupDevice();        return 0;    }    // Main message loop    MSG msg = {0};    while( WM_QUIT != msg.message )    {        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )        {            TranslateMessage( &msg );            DispatchMessage( &msg );        }        else        {            Render();        }    }    CleanupDevice();    return ( int )msg.wParam;}//--------------------------------------------------------------------------------------// Register class and create window//--------------------------------------------------------------------------------------HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ){    // Register class    WNDCLASSEX wcex;    wcex.cbSize = sizeof( WNDCLASSEX );    wcex.style = CS_HREDRAW | CS_VREDRAW;    wcex.lpfnWndProc = WndProc;    wcex.cbClsExtra = 0;    wcex.cbWndExtra = 0;    wcex.hInstance = hInstance;    wcex.hIcon = LoadIcon( hInstance, ( LPCTSTR )IDI_TUTORIAL1 );    wcex.hCursor = LoadCursor( NULL, IDC_ARROW );    wcex.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );    wcex.lpszMenuName = NULL;    wcex.lpszClassName = L"TutorialWindowClass";    wcex.hIconSm = LoadIcon( wcex.hInstance, ( LPCTSTR )IDI_TUTORIAL1 );    if( !RegisterClassEx( &wcex ) )        return E_FAIL;    // Create window    g_hInst = hInstance;    RECT rc = { 0, 0, 640, 480 };    AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );    g_hWnd = CreateWindow( L"TutorialWindowClass", L"Direct3D 10 Tutorial 2: Rendering a Triangle",                           WS_OVERLAPPEDWINDOW,                           CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance,                           NULL );    if( !g_hWnd )        return E_FAIL;    ShowWindow( g_hWnd, nCmdShow );    return S_OK;}//--------------------------------------------------------------------------------------// Create Direct3D device and swap chain//--------------------------------------------------------------------------------------HRESULT InitDevice(){    HRESULT hr = S_OK;    RECT rc;    GetClientRect( g_hWnd, &rc );    UINT width = rc.right - rc.left;    UINT height = rc.bottom - rc.top;    UINT createDeviceFlags = 0;#ifdef _DEBUG    createDeviceFlags |= D3D10_CREATE_DEVICE_DEBUG;#endif    D3D10_DRIVER_TYPE driverTypes[] =    {        D3D10_DRIVER_TYPE_HARDWARE,        D3D10_DRIVER_TYPE_REFERENCE,    };    UINT numDriverTypes = sizeof( driverTypes ) / sizeof( driverTypes[0] );    DXGI_SWAP_CHAIN_DESC sd;    ZeroMemory( &sd, sizeof( sd ) );    sd.BufferCount = 1;    sd.BufferDesc.Width = width;    sd.BufferDesc.Height = height;    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;    sd.BufferDesc.RefreshRate.Numerator = 60;    sd.BufferDesc.RefreshRate.Denominator = 1;    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;    sd.OutputWindow = g_hWnd;    sd.SampleDesc.Count = 1;    sd.SampleDesc.Quality = 0;    sd.Windowed = TRUE;    for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ )    {        g_driverType = driverTypes[driverTypeIndex];        hr = D3D10CreateDeviceAndSwapChain( NULL, g_driverType, NULL, createDeviceFlags,                                            D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice );        if( SUCCEEDED( hr ) )            break;    }    if( FAILED( hr ) )        return hr;    // Create a render target view    ID3D10Texture2D* pBuffer;    hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D10Texture2D ), ( LPVOID* )&pBuffer );    if( FAILED( hr ) )        return hr;    hr = g_pd3dDevice->CreateRenderTargetView( pBuffer, NULL, &g_pRenderTargetView );    pBuffer->Release();    if( FAILED( hr ) )        return hr;    g_pd3dDevice->OMSetRenderTargets( 1, &g_pRenderTargetView, NULL );    // Setup the viewport    D3D10_VIEWPORT vp;    vp.Width = width;    vp.Height = height;    vp.MinDepth = 0.0f;    vp.MaxDepth = 1.0f;    vp.TopLeftX = 0;    vp.TopLeftY = 0;    g_pd3dDevice->RSSetViewports( 1, &vp );    // Create the effect    DWORD dwShaderFlags = D3D10_SHADER_ENABLE_STRICTNESS;#if defined( DEBUG ) || defined( _DEBUG )    // Set the D3D10_SHADER_DEBUG flag to embed debug information in the shaders.    // Setting this flag improves the shader debugging experience, but still allows     // the shaders to be optimized and to run exactly the way they will run in     // the release configuration of this program.    dwShaderFlags |= D3D10_SHADER_DEBUG;    #endif    hr = D3DX10CreateEffectFromFile( L"Tutorial02.fx", NULL, NULL, "fx_4_0", dwShaderFlags, 0,                                         g_pd3dDevice, NULL, NULL, &g_pEffect, NULL, NULL );    if( FAILED( hr ) )    {        MessageBox( NULL,                    L"The FX file cannot be located.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );        return hr;    }    // Obtain the technique    g_pTechnique = g_pEffect->GetTechniqueByName( "Render" );    // Define the input layout    	D3D10_INPUT_ELEMENT_DESC myLayout[] = 	{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,0, D3D10_INPUT_PER_VERTEX_DATA, 0,};    UINT numElements = sizeof( myLayout ) / sizeof( myLayout[0] );    // Create the input layout   D3D10_PASS_DESC myDesc;   g_pTechnique->GetPassByIndex(0)->GetDesc(&myDesc);   if ( FAILED(g_pd3dDevice->CreateInputLayout(myLayout, numElements, myDesc.pIAInputSignature, myDesc.IAInputSignatureSize, &g_pVertexLayout) ) )	   return false;    // Set the input layout   g_pd3dDevice->IASetInputLayout( g_pVertexLayout );    // Create vertex buffer    myVertex vertices[] =    {        D3DXVECTOR3(0.0f, 0.0f, 1.0f),		D3DXVECTOR3(0.0f, 1.0f, 1.0f),		D3DXVECTOR3(1.0f, 1.0f, 1.0f),		D3DXVECTOR3(1.0f, 0.0f, 1.0f),    };	D3D10_BUFFER_DESC myBuffer;	myBuffer.ByteWidth = sizeof(myVertex) * 4;	myBuffer.Usage = D3D10_USAGE_DEFAULT;	myBuffer.BindFlags = D3D10_BIND_VERTEX_BUFFER;	myBuffer.CPUAccessFlags = 0;	myBuffer.MiscFlags = 0;	D3D10_SUBRESOURCE_DATA dat;	dat.pSysMem = vertices;       // Set vertex buffer    UINT stride = sizeof( myVertex );    UINT offset = 0;    g_pd3dDevice->IASetVertexBuffers( 0, 1, &g_pVertexBuffer, &stride, &offset );    // Set primitive topology	g_pd3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );    return S_OK;}//--------------------------------------------------------------------------------------// Clean up the objects we've created//--------------------------------------------------------------------------------------void CleanupDevice(){    if( g_pd3dDevice ) g_pd3dDevice->ClearState();    if( g_pVertexBuffer ) g_pVertexBuffer->Release();    if( g_pVertexLayout ) g_pVertexLayout->Release();    if( g_pEffect ) g_pEffect->Release();    if( g_pRenderTargetView ) g_pRenderTargetView->Release();    if( g_pSwapChain ) g_pSwapChain->Release();    if( g_pd3dDevice ) g_pd3dDevice->Release();}//--------------------------------------------------------------------------------------// Called every time the application receives a message//--------------------------------------------------------------------------------------LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){    PAINTSTRUCT ps;    HDC hdc;    switch( message )    {        case WM_PAINT:            hdc = BeginPaint( hWnd, &ps );            EndPaint( hWnd, &ps );            break;        case WM_DESTROY:            PostQuitMessage( 0 );            break;        default:            return DefWindowProc( hWnd, message, wParam, lParam );    }    return 0;}//--------------------------------------------------------------------------------------// Render a frame//--------------------------------------------------------------------------------------void Render(){    // Clear the back buffer     float ClearColor[4] = { 0.0f, 0.125f, 0.3f, 1.0f }; // red,green,blue,alpha    g_pd3dDevice->ClearRenderTargetView( g_pRenderTargetView, ClearColor );    // Render a triangle    D3D10_TECHNIQUE_DESC techDesc;    g_pTechnique->GetDesc( &techDesc );    for( UINT p = 0; p < techDesc.Passes; ++p )    {        g_pTechnique->GetPassByIndex( p )->Apply( 0 );        g_pd3dDevice->Draw( 4, 0 );    }    // Present the information rendered to the back buffer to the front buffer (the screen)    g_pSwapChain->Present( 0, 0 );}


.fx file:
//--------------------------------------------------------------------------------------// File: Tutorial02.fx//// Copyright (c) Microsoft Corporation. All rights reserved.//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------// Vertex Shader//--------------------------------------------------------------------------------------float4 VS( float4 Pos : POSITION ) : SV_POSITION{    return Pos;}//--------------------------------------------------------------------------------------// Pixel Shader//--------------------------------------------------------------------------------------float4 PS( float4 Pos : SV_POSITION ) : SV_Target{    return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1}//--------------------------------------------------------------------------------------technique10 Render{    pass P0    {        SetVertexShader( CompileShader( vs_4_0, VS() ) );        SetGeometryShader( NULL );        SetPixelShader( CompileShader( ps_4_0, PS() ) );    }}


Hey I have this code from the DX samples. When I try to draw a square instead of a triangle, nothing comes up...lol. I'm trying to figure out why...is it because of this shader file? If so, what's that language called so I can get some more info on it?

If not, what could be the problem. D:
They hated on Jeezus, so you think I give a f***?!
@OP: try using XNA instead. Once you get the hang of 3d programming, the jump to DirectX (or OpenGL + various supporting stacks) will be much *much* easier.

[OpenTK: C# OpenGL 4.4, OpenGL ES 3.0 and OpenAL 1.1. Now with Linux/KMS support!]

woot I made a square. :D

v[0] = vertex( D3DXVECTOR3(-2, 2,0), D3DXVECTOR4(1,0,0,1) );	v[1] = vertex( D3DXVECTOR3(2,2,0), D3DXVECTOR4(0,1,0,1) );	v[2] = vertex( D3DXVECTOR3(-2,-2,0), D3DXVECTOR4(0,0,1,1) );	v[3] = vertex( D3DXVECTOR3(2,-2,0), D3DXVECTOR4(0,1,0,1) );	pVertexBuffer->Unmap();	// Set primitive topology 	pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP  );

They hated on Jeezus, so you think I give a f***?!
Here is how I learnt DirectX:
- Learned Win32
- Learnt GDI
- Wrote all major rendering algorithms, lines, ellipse, circles, ...
- Used DirectDraw (old) to rewrite all the above.
- Wrote a software renderer (the full 3d pipeline and a custom triangle rasterizer)
- After all the above, I started learning Direct9, how to initialize, load meshes,... start with the easiest Tiger Sample.

- Then started with animated (multianimation sample I think).
- Wrote a scenegraph engine, that loads and optimized the rendering.
- Moved to shaders and implemented several shaders into the engine.

This topic is closed to new replies.

Advertisement